Elasticsearch地理查询

时间:2019-03-18 14:37:53

标签: java elasticsearch elastic-rest-client

我们正在迁移到ES,需要支持不同的地理位置查询。 我们在映射中使用geo_point字段类型。我可以看到ES支持geo_bounding_box和geo_distance,但我正在尝试确定它们是否可用于以下我们的用例:

1.BBOX:其中使用中心点和半径定义框。据我了解,geo_distance将创建一个圆形,我们如何使用该圆形的bbox?

//something like this - but we want a box shape not circle
QueryBuilders.geoDistanceQuery("location")
            .point(lat, lon)
            .distance(r, DistanceUnit.KILOMETERS);

2.LAT_WITHIN:我们如何检查纬度在距中心纬度(南北)以内的文档中?

//something like this - but with only lat & radius
QueryBuilders.geoDistanceQuery(pointField)
            .point(lat)   //only lat?
            .distance(r, DistanceUnit.KILOMETERS);

3.LON_WITHIN:与上述点类似,但经度不变。

4.SAME POINT:查找具有相同纬度的文档。那么我们可以在这里在术语查询中使用geo字段,还是可以使用经纬度键?

//point equal - this gives error
QueryBuilders.termQuery("location", "lat,lon");
//OR - this doesn't return
QueryBuilders.boolQuery()
    .must(QueryBuilders.termQuery("location.lat", lat))
    .must(QueryBuilders.termQuery("location.lon", lon));

使用第一个查询会出现错误“地理位置字段不支持精确搜索,请改用专用地理位置查询:[位置]”。第二个查询不返回结果。

谢谢

0 个答案:

没有答案