【问题标题】:How to return all documents for each bucket after ElasticSearch term aggregation?ElasticSearch术语聚合后如何返回每个桶的所有文档?
【发布时间】: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,那么我可以获得所有存储桶的所有命中吗?

标签: elasticsearch aggregate


【解决方案1】:

您是否考虑过在field 上使用collapse

它返回分组在 inner_hits (hits.hits[].inner_hits.<collapse-group-name>.hits.hits[]._source) 下的文档

参考 - https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-collapse.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多