java - Elasticsearch 地理查询
问题描述
我们正在迁移到 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:查找具有相同纬度和经度的文档。那么我们可以在这里使用术语查询中的地理点字段还是可以使用纬度/经度键?
//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));
使用第一个查询会给出错误“地理字段不支持精确搜索,请改用专用地理查询:[位置]”。第二个查询不返回结果。
谢谢
解决方案
推荐阅读
- unity3d - Unity/HLSL:根据表面法线尝试使用纹理图集的不同部分时出现奇怪的结果
- python - 无法让 swig %ignore 忽略命名空间中的类导致编译错误
- git-config - 使用 RStudio 提交到 github
- aws-api-gateway - ApiGateway:如果基础路径为空,则只允许一个基础路径映射
- swift - 为什么使用 isEmpty 优于与空字符串文字的比较是 Swift?
- python - 错误的 scipy 拟合,即使初始猜测良好
- python - 将 os 模块添加到 PyCharm
- powerbi - 仅显示日期切片器 Power Bi 的第一个日期和最后一个日期的测量值
- javascript - 无法从 RESTFUL API 获得 Node 的正文响应
- enums - ldap 从模式中获取定义的枚举及其值