【问题标题】:Elasticsearch combining fuzzy matching with geo distance sorting将模糊匹配与地理距离排序相结合的 Elasticsearch
【发布时间】:2018-10-24 04:34:15
【问题描述】:

我有一个 Elasticsearch 查询,其中包括一个布尔必须匹配查询以及一个地理距离排序。我在比赛中允许模糊度为 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"
      }
    }
  ]
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我建议您按_geo_distance _score 排序,_score 排序在前。

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

    在这种情况下,您将首先按匹配排序,这会使完全匹配看起来更高,而对于相同的分数,您将按距离排序。

    【讨论】:

    • 感谢您的回答。在您的示例中,_geo_distance 排序 only 是否会作为与 _score 完全相同匹配的文档的决胜局?
    • 是的,究竟会发生什么,这将完全按照您的意愿进行,对吧?您将获得“我的查询”的结果,然后按距离正确排序
    猜你喜欢
    • 2017-04-08
    • 2020-01-18
    • 1970-01-01
    • 2017-12-31
    • 2021-10-21
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多