gpt4 book ai didi

elasticsearch - 获得所有聚合结果的最有效方法是

转载 作者:行者123 更新时间:2023-12-02 23:22:20 29 4
gpt4 key购买 nike

我有以下查询:

GET my-index-*/my-type/_search
{
"size": 0,
"aggregations": {
"my_agg": {
"terms": {
"script" : "code"
},
"aggs": {
"dates": {
"date_range": {
"field": "created_time",
"ranges": [
{
"from": "2017-12-09T00:00:00.000",
"to": "2017-12-09T16:00:00.000"
},
{
"from": "2017-12-10T00:00:00.000",
"to": "2017-12-10T16:00:00.000"
}
]
}
},
"total_count": {
"sum_bucket": {
"buckets_path": "dates._count"
}
},
"bucket_filter": {
"bucket_selector": {
"buckets_path": {
"totalCount": "total_count"
},
"script": "params.totalCount == 0"
}
}
}
}
}
}

该查询的结果是一堆存储桶。我需要的是我的存储桶的键列表。问题是聚合结果大小默认为10,得到10后,我的 bucket_filter按总数过滤它们,而我只得到其中的10个。我需要所有结果,这意味着我需要指定 "size" = n,其中 ncode值的唯一计数,因此我不会丢失任何数据。我有数十亿个文档,因此在我的情况下 n约为30.000。当我尝试执行查询时,群集上发生“内存不足”,因此我认为这不是最好的主意。有没有一种很好的方法来获取我的查询的所有结果?

最佳答案

不幸的是,不建议将其用于具有30K唯一值的高杀伤力字段。原因是由于内存成本以及您发现的需要从分片收集的大量数据。它可能会起作用,但随后您需要更多的内存...

一种更有效的解决方案是使用Scroll API并在搜索请求中的fields中指定要从字段中检索的值,然后将这些值存储在客户端内存中或对其进行流传输。

更新:自ES 6.5起,使用复合聚合就可以实现此功能,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html

关于elasticsearch - 获得所有聚合结果的最有效方法是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793529/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com