我们正在迁移到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));
使用第一个查询会出现错误“地理位置字段不支持精确搜索,请改用专用地理位置查询:[位置]”。第二个查询不返回结果。
谢谢