如何找到距输入位置一定范围内的位置?

时间:2018-08-07 06:59:33

标签: elasticsearch

我的映射如下:

{
"my_locations": {
  "aliases": {

  },
  "mappings": {
    "_doc": {
      "properties": {
          "location": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
        },

我知道,如果位置的字段类型为“ geo_point”,那么我可以使用以下地理位置距离查询。

GET /my_locations/_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "200km",
                    "location" : {
                        "lat" : 40,
                        "lon" : -70
                    }
                }
            }
        }
    }
}

我读到我无法将位置的字段类型从文本更改为geo_point(来自弹性搜索文档和stackoverflow),并且我已经有很多数据。那么,如何在输入位置的一定范围内找到位置?

1 个答案:

答案 0 :(得分:1)

首先,您需要使用正确的数据类型创建一个新索引

PUT my_locations_2
{
  "mappings": {
    "_doc": {
      "properties": {
          "location": {
            "type": "geo_point"
          }
      }
   }
}

然后,您可以使用reindex API来将数据从旧索引复制到新索引:

POST _reindex
{
  "source": {
    "index": "my_locations"
  },
  "dest": {
    "index": "my_locations_2"
  }
}