Solr 7.3.1版本多条件OR查询排序异常求助
Solr多条件OR查询的自定义排序实现
针对你的需求,在不能修改Solr配置、无法依赖默认评分排序的情况下,可以通过Solr函数排序实现指定的结果顺序,具体方案如下:
核心思路
利用Solr内置的if()和query()函数,在sort参数中为不同匹配规则的文档赋予差异化权重,再按权重降序排列:
- 完全匹配
title:"some tests*"的文档赋予最高权重 - 仅包含
tests的文档赋予次高权重 - 仅包含
some的文档赋予最低权重
具体实现
将原查询语句与自定义排序参数结合,完整请求配置如下:
查询语句
q={!complexphrase inOrder=true}title:"some tests*" || title:(some tests*)
排序参数
sort=if(query(title:"some tests*"), 3, if(query(title:tests), 2, if(query(title:some), 1, 0))) desc
效果验证
对应你的测试数据:
title:"some tests"匹配精确条件,权重为3,排首位title:"data tests"匹配tests关键词,权重为2,排第二位title:"some values"匹配some关键词,权重为1,排第三位
完全符合预期排序要求。
注意事项
- 该方案基于Solr 7.3.1原生支持的函数实现,无需修改任何服务端配置
- 权重数值可根据实际需求调整,只要保持优先级顺序一致即可
内容的提问来源于stack exchange,提问作者Marco Frag Delle Monache
相关产品推荐
相关产品推荐

