elasticsearch:如何获取3个或更多字段的多个组合的结果
在elasticsearch中,如果我有带有Foo
Bar
Baz
Qux
属性的文档说,还有其他一些属性。
我需要以以下方式查询结果
foo1 bar1 baz1 qux1
foo1 bar1 baz1 qux2
foo1 bar1 baz2 qux1
foo1 bar1 baz2 qux2
foo1 bar2 baz1 qux1
基本上,我需要doc_count可用的所有组合。使用该结果,可以说
粗略的方法是,在terms
聚合内部使用聚合terms
(在这种情况下为4次)。
应该有一些更简单的方法可以做到这一点。
提前致谢
回答:
您提到的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(',')"
}
}
}
}
}
以上是 elasticsearch:如何获取3个或更多字段的多个组合的结果 的全部内容, 来源链接: utcz.com/qa/433356.html