ElasticSearch范围聚合存储桶doc_count与范围字段类型不一致

ldxq2e6h  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(149)

我需要Elasticsearch范围聚合doc_count与范围字段查询一致。该字段是浮点类型。
我面临的挑战是使用Range聚合和Range字段查询获得一致的计数结果。

ElasticSearch范围聚合:

GET /ranking/_search
{
  "size": 0, 
  "aggs": {
    "score_ranges": {
      "range": {
        "field": "field_rating",
        "keyed": true, 
        "ranges": [
          { "to":4.99 },
          { "from": 4.99, "to": 9.99 },
          { "from": 9.99, "to": 19.99 },
          { "from": 19.99, "to": 29.99 },
          { "from": 29.99 }
        ]
      }
    }
  }
}

范围字段查询:

GET /ranking/_search&search_type=_count
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "field_rating": {
            "gte": "1.00",
            "lte": "4.99"
          }
        }
      }
    }
  }
}

我在文件中读到-
“请注意,此汇总包括每个范围的起始值,但不包括终止值”
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html
我想知道是否有一种方法可以使聚合与Range查询一致。
任何帮助都是非常感谢的。谢谢

c0vxltue

c0vxltue1#

我想过滤器应该返回与第一个桶中相同的文档/计数。该存储桶不包括to值,因此将评级值为4.99的文档包含在该存储桶中。但是您使用lte过滤器将它们计算在内。
因此需要将其更改为"lt": "4.99"
第二个问题:您的过滤器不会考虑任何等级低于1.0的文档,而第一个存储桶没有设置下限。如果该值永远不会低于1.0,则这是正常的,否则这也会导致不同的结果。

相关问题