我有一个Elasticsearch查询,其中包含bool必须匹配的查询以及地理距离排序。我在比赛中允许模糊等级为1。我遇到的问题是排序导致匹配的文档分数被忽略,因此如果模糊匹配在地理上更接近于模糊匹配,则在精确匹配之前可能会在结果列表中出现几个模糊匹配。搜索位置。
有没有办法将模糊匹配与地理距离排序相结合,这样精确匹配仍然优先于距离更近的模糊匹配?或者 - 我是否以错误的方式思考这个问题,我是否需要采取不同的方法?
我考虑的另一个选项是使用地理距离滤波器(5,10,25英里等)执行多个查询,不用距离排序,并组合结果。我希望尽可能避免多次查询,因为这只是针对预先输出功能而且性能至关重要。
目前我的查询类似于:
GET <myindex>/_search
{
"from": 0, "size": 10,
"query": {
"bool": {
"must": [
{
"match": {
"searchName": {
"query" : "my query",
"operator" : "AND",
"fuzziness" : "1",
"fuzzy_transpositions" : true
}
}
}
]
}
},
"sort": [
{
"_geo_distance" : {
"location" : [-93.26000213623047, 44.970001220703125],
"order" : "asc",
"unit" : "mi",
"mode" : "min",
"distance_type" : "arc"
}
}
]
}
答案 0 :(得分:0)
我建议您按_geo_distance
和 _score
进行排序,首先排序_score
。
"sort": [
"_score",
{
"_geo_distance" : {
"location" : [-93.26000213623047, 44.970001220703125],
"order" : "asc",
"unit" : "mi",
"mode" : "min",
"distance_type" : "arc"
}
}
]
在这种情况下,您首先要进行匹配排序,这样可以使精确匹配显得更高,而对于相同的分数,您将对距离进行排序。