我有一个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"
}
}
]
}
1 回答
我建议你按
_geo_distance
and_score
排序,先排序_score
排序 .在这种情况下,您将首先按匹配排序,这将使精确匹配显得更高,然后对于相同的分数,您将按距离排序 .