【发布时间】:2015-06-24 14:59:56
【问题描述】:
我使用以下简单查询在我的弹性索引中搜索文档:
{
"query": { "query_string": { "query": "*test*" } },
"aggregations": {
"myaggregation": {
"terms": { "field": "myField.raw", "size": 0 }
}
}
}
这将返回每个 myField.raw 不同值的文档数。
由于我对所有个实际文档比总数感兴趣,我尝试添加以下top_hits子聚合:
{
"query": { "query_string": { "query": "*test*" } },
"aggregations": {
"myaggregation": {
"terms": { "field": "myField.raw", "size": 0 },
"aggregations": {
"hits": {
"top_hits": { "size": 2000000 }
}
}
}
}
}
top_hits 的这种丑陋用法有效,但速度慢得要命。
在进行term 聚合之后,是否有任何适当的方法来获取每个存储桶的实际文档?
【问题讨论】:
-
不,别无他法。聚合并不意味着返回所有文档。此外,如果它想返回 Elasticsearch 中的所有文档,则没有用例可以。这将是一个非常占用内存的操作,而且速度也很慢。
-
太糟糕了。我现在使用术语聚合,没有任何子聚合,并在客户端建立我的特定结果。不管怎么说,还是要谢谢你! :)
-
假设我可以等待
top_hits,但它每个桶返回 100 个命中,我有 100 万个桶。假设我的size + from限制是默认的 10000,那么我可以获得所有存储桶的所有命中吗?