我需要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查询一致。
任何帮助都是非常感谢的。谢谢
1条答案
按热度按时间c0vxltue1#
我想过滤器应该返回与第一个桶中相同的文档/计数。该存储桶不包括
to
值,因此不将评级值为4.99的文档包含在该存储桶中。但是您使用lte
过滤器将它们计算在内。因此需要将其更改为
"lt": "4.99"
第二个问题:您的过滤器不会考虑任何等级低于1.0的文档,而第一个存储桶没有设置下限。如果该值永远不会低于1.0,则这是正常的,否则这也会导致不同的结果。