【问题标题】:Distance banding with Elastic Search使用 Elastic Search 进行距离分段
【发布时间】:2016-03-10 12:49:25
【问题描述】:

我想应用“距离带”。我不只是简单地按距离排序,而是希望 5 英里内的文档首先出现,然后是 5-10 英里的文档,然后是 10-15 英里、15-25 英里、25-50 英里、50+ 英里的文档。 (并且在每个距离范围内,它们将按其他标准排序)。

我阅读了关于 function_score 衰减的内容,但我认为它不太符合目的。

你会建议如何去做?提升?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    实现此目的的一种方法是使用geo_distance 聚合来定义波段,然后在每个波段中使用带有某种排序标准的top_hits

    看起来像这样。您需要更改位置字段 (location) 和排序字段 (name) 以匹配您的:

    {
      "size": 0,
      "aggs": {
        "rings": {
          "geo_distance": {
            "field": "location",
            "origin": "52.3760, 4.894",
            "ranges": [
              {
                "to": 5
              },
              {
                "from": 5, "to": 10
              },
              {
                "from": 10, "to": 15
              },
              {
                "from": 15, "to": 25
              },
              {
                "from": 25, "to": 50
              },
              {
                "from": 50
              }
            ]
          },
          "aggs": {
            "hits": {
              "top_hits": {
                "size": 5,
                "sort": {
                  "name": "asc"
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 瓦尔,谢谢你的回答。
    • 我还有一个问题。如果我想先按相关性分数排序,然后如果分数相等,按上面的“距离带”排序怎么办?有可能吗?
    • 很高兴它有帮助。我建议针对您的新需求提出另一个问题。
    • 如果它有帮助,你也应该接受这个,以便向其他人表明它是有帮助的。
    猜你喜欢
    • 2014-04-27
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多