首页 文章

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

提问于
浏览
0

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

    我建议你按 _geo_distance and _score 排序,先排序 _score 排序 .

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

    在这种情况下,您将首先按匹配排序,这将使精确匹配显得更高,然后对于相同的分数,您将按距离排序 .

相关问题