如何在Solr中按精确匹配与部分匹配对搜索结果分组?
把Solr搜索结果按查询词匹配度分组的实用方案
我来给你几个靠谱的实现思路,帮你把搜索结果分成「包含所有查询词的相关组」和「只含部分查询词的关联组」:
方法一:单查询加标记字段(推荐)
这是最省心的方式,一次请求就能搞定,还能保留原有的得分排序:
你可以在查询里用Solr的函数查询给匹配所有关键词的文档打个标记,然后在结果里直接按标记分组。比如你的查询是cyber security,可以这么写请求参数:
&q=cyber security&fl=*,score,is_relevant:if(query("cyber AND security"),1,0)
这里的is_relevant是我们自定义的字段,当文档同时包含cyber和security时会返回1,否则返回0。拿到结果后,直接把is_relevant=1的归为相关组,0的归为关联组就行。
方法二:两次独立查询
如果不想搞复杂的函数查询,也可以分两次请求:
- 第一次查相关组:直接用
&q=cyber AND security,拿到所有同时包含两个关键词的文档 - 第二次查关联组:用
&q=cyber security AND NOT (cyber AND security),拿到只含部分关键词的文档
这种方法简单直接,但会多一次请求,适合结果量不大的场景。
方法三:用Solr自带的Group分组功能
Solr本身就支持按查询条件分组,直接用参数就能让它返回分组好的结果:
&q=cyber security&group=true&group.query=cyber AND security&group.query=cyber AND NOT security
这个请求会直接返回两个分组:第一个是匹配cyber AND security的相关组,第二个是只含cyber不含security的关联组,结果结构已经帮你分好,直接解析对应分组的数据就可以了。
小提醒
- 要确保你的查询词分词逻辑和字段的分词器一致,不然可能会出现匹配不准的情况
- 方法一和方法三都能保留原有的得分排序,方法二如果需要统一排序的话,得自己处理两组结果的合并排序
内容的提问来源于stack exchange,提问作者Kabhi
相关产品推荐
相关产品推荐

