在弹性搜索中,如果我有包含attribtutes的文档说Foo
Bar
Baz
Qux
和其他一些属性。
我需要以这样的方式查询,以便以下面的方式得到结果
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提供的所有组合。使用结果,可以说有Foo = foo1,Bar = bar1,Baz = baz1,Qux = qux1,有20个文件/记录
原油方式是,在terms
聚合中使用terms
聚合(在这种情况下为4次)。
应该有一些更简单的方法来做到这一点。
先谢谢
答案 0 :(得分:1)
使用4个嵌入式terms
聚合提及的方式非常好。
另一种方法是使用单terms
个聚合script
,这会产生一个由您尝试聚合的四个词组成的假词,如下所示:
{
"size": 0,
"aggs": {
"combinations": {
"terms": {
"script": "[doc.foo.value, doc.bar.value, doc.baz.value, doc.qux.value].join(',')"
}
}
}
}
注意:请确保enable dynamic scripting以使用上述脚本聚合。
为了在搜索时节省一些周期,另一个解决方案是在另一个字段中的索引时创建该聚合术语,然后将其用于单个terms
聚合。
编辑:
如果结果的顺序很重要,则应根据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(',')"
}
}
}
}
}