您提到的4种嵌入式
terms聚合方式是一个很好的方法。
另一种方法是将单个
terms聚合与一起使用
script,这将创建由您要聚合的四个术语组成的假术语,如下所示:
{ "size": 0, "aggs": { "combinations": { "terms": { "script": "[doc.foo.value, doc.bar.value, doc.baz.value, doc.qux.value].join(',')" } } }}注意:请确保启用动态脚本,以使用上述脚本聚合。
为了在搜索时节省一些周期的另一种解决方案是在索引时在另一个字段中创建该聚合项,然后将其用于单个
terms聚合中。
编辑:如果结果的顺序很重要,则应基于doc_count进行排序
foo
{ "size": 0, "aggs": { "primary": { "terms": { "field": "foo" },"aggs": { "combinations": { "terms": { "script": "[doc.foo.value, doc.bar.value, doc.baz.value, doc.qux.value].join(',')" } }} }}


