如何按优先级对多个ElasticSearch索引排序并保留原始分数?
按索引对ElasticSearch查询结果排序的实现方案
完全可行,你可以通过排序规则组合实现优先展示artists索引结果、再展示songs索引结果,同时保留两个索引内文档的原始得分排序,且不会影响原始得分的计算逻辑。
具体实现方式是在查询的sort参数中,先添加一个基于索引名称的自定义排序规则,再将原始得分(_score)作为第二排序条件:
{ "query": { // 替换为你的实际查询语句,比如match、bool等 "match": { "content": "关键词" } }, "sort": [ { "_script": { "type": "number", "script": { "source": "doc['_index'].value == 'artists' ? 0 : 1" }, "order": "asc" } }, { "_score": { "order": "desc" } } ] }
逻辑说明:
- 第一个排序规则通过脚本判断文档所属索引:
artists索引的文档返回0,songs索引返回1,按升序排列后,artists的结果会全部排在songs之前。 - 第二个排序规则按原始得分(
_score)降序排列,确保同一索引内的文档依然按照查询的原始得分排序,完全保留得分逻辑不受影响。
这种方式仅在排序阶段调整结果顺序,不会对查询的得分计算产生任何干扰,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者she hates me
相关产品推荐
相关产品推荐

