如何让Elasticsearch排序时指定字段值(如"Other Countries")优先置顶?
实现特定值置顶的Elasticsearch排序方案
要让"Other Countries"始终排在结果最顶部,其余数据仍按字母升序排列,你可以通过多条件排序实现:先给目标值设置优先排序权重,再按原字段排序。
修改后的查询语句如下:
{ "query": { "bool": { "must": [ { "match": { "type": "COUNTRY" } }, { "wildcard": { "value": "**" } } ] } }, "sort": [ { "_script": { "type": "number", "script": { "source": "doc['country'].value == 'Other Countries' ? 0 : 1" }, "order": "asc" } }, { "country": { "order": "asc", "missing": "_first" } } ], "size": 10, "track_total_hits": true }
关键修改说明:
- 在
sort数组最前面新增了一个_script排序规则:通过脚本判断country字段值是否为"Other Countries",是则返回0,否则返回1。因为按升序排序,0会排在所有1前面,实现目标值置顶。 - 保留原有的
country字段排序,确保其余数据继续按字母升序排列。 - 删掉了原查询里冗余的空
should子句,简化查询结构的同时不影响功能。
内容的提问来源于stack exchange,提问作者Nam Kiều Thanh
相关产品推荐
相关产品推荐

