比如让type为male的排在前面,则使用script
{
"query": {
"match_all": {}
},
"sort": [
{
"_script": {
"type": "number",
"script": "doc['type.keyword'].value=='male'?0:1",
"order": "asc"
}
}
]
}
注意:==后面要加的字符串,我的keyword上配了lower_case,所以后面接小写,一开始用错了
同时注意scrip有限制,每分钟编译的内容过多会报错,默认是75/5m,如果量不是很大,可以通过修改集群的每分钟编译次数解决
PUT _cluster/settings
{
"transient" : {
"script.max_compilations_rate" : "100/1m"
}
}
但是如果服务要求高并发,这种方法很难支持,需要使用参数替换的方式,这样实际script只编译一次,每次搜索只是替换了参数:
{
"query": {
"match_all": {
}
},
"sort": [{
"_script": {
"type": "number",
"script": {
"inline": "doc['type.keyword'].value==params.male_type?0:1",
"params": {
"male_type": "male"
}
},
"order": "asc"
}
}]
}