使用弹性搜索进行距离绑定

时间:2016-03-09 23:21:19

标签: elasticsearch

我想应用“距离条带”。我不希望仅按距离排序,而是首先获得5英里内的文件,然后是5-10英里的文件,然后是10-15英里,15-25英里,25-50英里,50英里。 (并且在每个距离范围内,它们将按照其他一些标准进行分类)。

我读过function_score decay,但我认为它不符合目的。

你会怎么建议去做?升压?

1 个答案:

答案 0 :(得分: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"
            }
          }
        }
      }
    }
  }
}