将模糊匹配与地理距离排序相结合的弹性搜索

时间:2018-05-14 13:31:57

标签: elasticsearch

我有一个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 个答案:

答案 0 :(得分:0)

我建议您按_geo_distance _score进行排序,首先排序_score

"sort": [
    "_score",
    {
      "_geo_distance" : {
          "location" : [-93.26000213623047, 44.970001220703125],
          "order" : "asc",
          "unit" : "mi",
          "mode" : "min",
          "distance_type" : "arc"
      }
    }
  ]

在这种情况下,您首先要进行匹配排序,这样可以使精确匹配显得更高,而对于相同的分数,您将对距离进行排序。