我在Elasticsearch中有以下映射:
{
"mappings": {
"event": {
"_all": { "enabled": false },
"properties": {
"type": { "type": "string", "index": "not_analyzed"},
"id": { "type": "string"},
"location": { "type": "geo_point"}
}
}
}
}
我想做的是查询由单个geohash定义的 map 区域内本地化的所有记录。
我知道geohash单元查询可以在我的示例中很好地工作,但是不幸的是,需要在geoeash_prefix选项设置为true的情况下对geo_point字段建立索引,elasticearch 2.4中已弃用该选项。
在最新的Elasticsearch版本中,这样做的正确方法是什么?我在文档的任何地方都找不到它。
最佳答案
Elasticsearch 6.0.0-alpha2 documentation says以下内容:
尝试将bottom_left
bounding box参数指定为your_geohash_prefix + '00...0'
,并将top_right
指定为your_geohash_prefix + 'zz...z'
。您应在geohash前缀后附加尽可能多的0
和z
符号,以使其长度为12(最大精度geohash长度)。
例如。对于geohash前缀dr5r9
,它看起来像:
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_bounding_box" : {
"coordinates" : {
"bottom_left" : "dr5r90000000",
"top_right" : "dr5r9zzzzzzz"
}
}
}
}
}
}
0
和z
分别作为geohash网格的左下角和右上角。通过将匹配的文档计数与相应精度的geohash网格聚合结果进行比较,我成功地通过这种方法对其进行了测试。但是我仍然有一些情况,有些观点没有落入这种边界框内。不能说这是100%正确的方法。
关于elasticsearch - Elasticsearch 2.4 Geohash单元查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40022857/