使用 Querybuilder 从全文搜索父路径中排除子路径或从 XPATH/JCR SQL2 查询中获取搜索命中摘录
Posted
技术标签:
【中文标题】使用 Querybuilder 从全文搜索父路径中排除子路径或从 XPATH/JCR SQL2 查询中获取搜索命中摘录【英文标题】:Exclude child path from fulltext search parent path using Querybuilder OR get search hit excerpt from XPATH/JCR SQL2 query 【发布时间】:2021-02-23 00:25:39 【问题描述】:我想使用 querybuilder 从搜索路径中排除子节点路径
例如 - 父文件夹是 /content/mysite/en
子文件夹是
/content/mysite/en/testfolder1
/content/mysite/en/testfolder2
我希望查询生成器编写一个查询以排除这些路径
我已经看过这个问题了-
AEM Query builder exclude a folder in search
但分组路径和 p.not=true 似乎没有按预期工作
我知道使用查询生成器编写这样的查询有点棘手;所以我正在使用 JCR/SQL2 查询 -
使用
SELECT * FROM [cq:Page]
WHERE ISDESCENDANTNODE(page,'/content/mysite/en')
AND CONTAINS(*, 'fulltext')
AND NOT ISDESCENDANTNODE(page, '/content/mysite/en/testfolder1')
AND NOT ISDESCENDANTNODE(page, '/content/mysite/en/testfolder2')
但现在的问题是,我们还想要由 querybuilder api 的 SearchResult 的命中对象自动创建的搜索摘录 -
hit.getExcerpt()
那么有没有办法使用 JCR/SQL2 查询来获取摘录?
或者有没有一种方法可以使用 querybuilder 构建排除子文件夹查询;这样我就可以从结果中摘录?两种解决方案都可以解决我的问题。
如果有人有使用 querybuilder 排除子文件夹查询的经验;或使用 JCR/SQL2 查询构建搜索摘录;或本案的任何其他想法/建议;非常感谢您的帮助
【问题讨论】:
【参考方案1】:试试 path.exact=true 下面是一个例子
没有 path.exact=true
type=cq:Page
path=/content/wkndmuzik/us/en
输出:
使用 path.exact=true
type=cq:Page
path=/content/wkndmuzik/us/en
path.exact=true
输出:
path.exact=true : 如果匹配 true 确切路径,如果 false 则包括所有后代。
有关 querybuider api 的其他谓词,请访问blog of Hashim Khan
【讨论】:
以上是关于使用 Querybuilder 从全文搜索父路径中排除子路径或从 XPATH/JCR SQL2 查询中获取搜索命中摘录的主要内容,如果未能解决你的问题,请参考以下文章
Laravel spatie QueryBuilder GET 请求搜索