我在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前缀后附加尽可能多的0z符号,以使其长度为12(最大精度geohash长度)。

例如。对于geohash前缀dr5r9,它看起来像:

{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_bounding_box" : {
                    "coordinates" : {
                        "bottom_left" : "dr5r90000000",
                        "top_right" : "dr5r9zzzzzzz"
                    }
                }
            }
        }
    }
}
0z分别作为geohash网格的左下角和右上角。

通过将匹配的文档计数与相应精度的geohash网格聚合结果进行比较,我成功地通过这种方法对其进行了测试。但是我仍然有一些情况,有些观点没有落入这种边界框内。不能说这是100%正确的方法。

关于elasticsearch - Elasticsearch 2.4 Geohash单元查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40022857/

10-09 07:22