elasticsearch实现某一字段值等于某字符串时优先排序问题
场景:在es分词搜索时,只要数据字段中包含搜索内容分词后的内容,就会被返回,这时需要将搜索内容和数据字段值完全一致的排序在最前面,于是就用到下面这种方法
GET /test/_search
{
"query": {
"bool": {
"must": [
[{
"match_phrase": {
"name": "中国建筑第八工程局有限公司"
}
}]
]
}
},
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "params.searchName==doc['name.key'].value ? 1 : 0", //这里计算后最终需要是一个数值,根据这个数值进行排序
"params": {
"searchName": "中国建筑第八工程局有限公司" //搜索条件,不要直接放在source中,会影响性能
}
},
"order": "desc"
}
}
}
注意搜索字段不能是 text类型,解决办法可参考:https://blog.csdn.net/yy756127197/article/details/95313424
无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。