elasticsearch实现某一字段值等于某字符串时优先排序问题


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



鼎云博客
  • 最新评论
  • 总共0条评论