【问题标题】:Elastic GeoHash Query - Aggregation Filter弹性 GeoHash 查询 - 聚合过滤器
【发布时间】:2017-12-01 10:37:13
【问题描述】:

我正在尝试查询一个弹性索引,其中查询的结果是只有一个匹配文档的地理哈希列表。

我可以使用以下方法获得所有地理哈希及其文档计数的简单列表:

{ "size" : 0, "aggregations" : { "boundingbox" : { "filter" : { "geo_bounding_box" : { "location" : { "top_left" : "34.5, -118.9", "bottom_right" : "33.3, -116." } } }, "aggregations":{ "grid" : { "geohash_grid" : { "field": "location", "precision": 4 } } } } } }

但是我无法找出过滤查询的正确语法,我能得到的最接近的语法如下:

这失败了 503 org.elasticsearch.search.aggregations.bucket.filter.InternalFilter cannot be cast to org.elasticsearch.search.aggregations.InternalMultiBucketAggregation

"aggregations":{ "grid" : { "geohash_grid" : { "field": "location", "precision": 4 } }, "grid_bucket_filter" : { "bucket_selector" : { "buckets_path" :{ "docCount" : "grid" //Also tried `"docCount" : "doc_count"` }, "script" : "params.docCount == 1" } } }

这失败了 400 No aggregation found for path [doc_count]

"aggregations":{ "grid" : { "geohash_grid" : { "field": "location", "precision": 4 } }, "grid_bucket_filter" : { "bucket_selector" : { "buckets_path" :{ "docCount" : "doc_count" }, "script" : "params.docCount > 1" } } }

如何根据 geohash 网格中的 doc_count 进行过滤?

【问题讨论】:

    标签: elasticsearch geohashing


    【解决方案1】:

    您需要这样做,即桶选择器管道应指定为geohash_grid 之一的子聚合。另外,您需要使用_count 而不是doc_count(参见here):

    {
      "aggregations": {
        "grid": {
          "geohash_grid": {
            "field": "location",
            "precision": 4
          },
          "aggs": {
            "grid_bucket_filter": {
              "bucket_selector": {
                "buckets_path": {
                  "docCount": "_count"
                },
                "script": "params.docCount > 1"
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 谢谢,很高兴有帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多