gpt4 book ai didi

elasticsearch - ElasticSearch中是否有任何 'Post-Aggregation'方法

转载 作者:行者123 更新时间:2023-12-02 22:38:00 24 4
gpt4 key购买 nike

我正在尝试在群集上运行一些统计信息。

有时,对于一个索引(或一种类型)而言,我不可能检索所有文档,因为它的数据流量很大。因此,我对查询设置了一些限制(例如:"size": 1000)。

结合聚合作用域,我将在hits作用域中获得1000个文档,并且的所有匹配文档的聚合结果将在索引中。

这种行为是可以理解的,但是由于我的统计信息的性质,我只想对实际检索到的文档进行汇总。

我知道查询范围中存在一种称为“后过滤”的方法,该方法在聚集计算后发生发生。

因此,我要搜索的是一些“后聚合”,它们发生在
检索文档后的上,因此,聚合仅在检索到的那些文档上才成立。

这是一些查询示例:

{
"size": 1000,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"make": "ford"
}
}
]
}
}
}
},
"aggregations": {
"types": {
"terms": {
"field": "color"
}
}
}
}

在上面的查询中,我只想获取那1000个检索到的文档的聚合结果。

有什么建议么?

最佳答案

I would like to get aggregation results only on those 1000 retrieved documents.



简短答案:使用 Sampler aggregation

长答案:您可以从每个分片中获得前N个

根据您的查询:
{
"size": 1000,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"make": "ford"
}
}
]
}
}
}
},
"aggregations": {
"types": {
"terms": {
"field": "color"
}
}
}
}

添加采样器后,聚合将如下所示:
{
"size": 1000,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [{
"term": {
"make": "ford"
}
}]
}
}
}
},
"aggregations": {
"sample": {
"sampler": {
"shard_size": 200
},
"aggs": {
"types": {
"terms": {
"field": "color"
}
}
}
}
}
}

注意 "shard_size": 200-默认为100。如果有5个分片(ES中为默认),则总共将获得5 * 200 = 1000个结果

关于elasticsearch - ElasticSearch中是否有任何 'Post-Aggregation'方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706417/

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