本文章总结自己在使用es过程中遇到的一些场景与解决办法。
1.查询结果排序
使用es进程query时,默认是按照_score排序的,当score同分时,同分结果顺序就不确定了(可能是按更新时间排序),如果要进行二次排序,就要用到sort功能了,话不多说,上代码:
POST /templatename/_search
{
"from" : 0,
"size" : 50,
"query": {
"match": {
"question" :"你说我的社保怎么交好呢?"}
},
"track_scores": true,
"sort": [
"_score",
{ "idx" : {"order" : "desc","unmapped_type" : "long"}}
]
}
这里score元素携带了排序信息,分别按_score和source中的idx元素排序,可以指定正序或逆序。unmapped_type不设置时,如果source中不包含idx元素,查询会返回错误信息,包含时,可以使用默认值填充,正序使用最大值,逆序使用最小值等。
使用了score元素默认不会计算最高分,携带track_scores元素可以继续计算最高分,一般没有这个必要。
下面看ja