使用 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 查询中获取搜索命中摘录的主要内容,如果未能解决你的问题,请参考以下文章

节点js中的REST api,用于使用弹性搜索进行全文搜索

在猫鼬中使用权重进行全文搜索

Laravel spatie QueryBuilder GET 请求搜索

django使用全文搜索引擎haystack+jieba分词

微信全文搜索技术优化

网络表单中的全文搜索