如何在ElasticSearch术语聚合后返回每个存储桶的所有文档?

man*_*anu 6 aggregate elasticsearch

我使用以下简单查询来搜索我的弹性索引中的文档:

{
    "query": { "query_string": { "query": "*test*" } },
    "aggregations": {
        "myaggregation": {
            "terms": { "field": "myField.raw", "size": 0 }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将返回每个不同值的文档数myField.raw.

由于我对所有实际文档感兴趣而不是总数,我尝试添加以下top_hits子聚合:

{
    "query": { "query_string": { "query": "*test*" } },
    "aggregations": {
        "myaggregation": {
            "terms": { "field": "myField.raw", "size": 0 },
            "aggregations": {
                "hits": {
                    "top_hits": { "size": 2000000 }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种丑陋的top_hits作品使用,但是很慢.

在进行term聚合后,有没有正确的方法来获取每个桶的实际文档?

JBo*_*rne 2

您是否考虑过使用collapseon field

它返回分组在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