在ElasticSearch中的Point类型的geoshape字段上通过geodistance过滤器查找文档

时间:2015-11-05 07:54:52

标签: elasticsearch geospatial

我的弹性搜索中的文档包含位置。它们在名为location的文档中包含一个字段,其中包含映射:"location": {"type": "geo_shape"}。我在文档中编制了索引的城市和国家。

在城市类型文档中(由字段"location_type": "city"标识),位置字段如下所示:"location": {"type": "Point", "coordinates": [12.343, 43.454]}

在国家/地区类型文档中(由字段"location_type": "country"标识),位置字段如下所示:"location": {"type": "MultiPolygon", "coordinates": [[12.343, 43.454], [12.23, 34.231]...]}。 我的问题是,我可以像这样运行geo_distance过滤器查询:

{
  "query": {
    "filtered": {
      "query": {
        "term": {
          "location_type": {
            "value": "city"
          }
        }
      }, 
      "filter": {
        "geo_distance": {
          "distance": 100,
          "distance_unit": "km",
          "location.coordinates": {
            "lat": 40.73,
            "lon": -74.1
          }
        }
      }
    }
  }
}

这给了我一个错误,说:嵌套:QueryParsingException无法找到geo_point字段[location.coordinates]

如何使此查询有效?

1 个答案:

答案 0 :(得分:1)

我用这种方法。写在这里供别人参考。

{
  "query": {
    "geo_shape": {
      "location": {
        "shape": {
          "type": "circle",
          "radius": "100km",
          "coordinates": [ 
            86,
            27
          ]
        }
      }
    }
  }
}