Elastic Searchで、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回)。
これを行うためのより簡単な方法があるはずです。
前もって感謝します
4つの埋め込みterms
アグリゲーションでのあなたの言及は良いものです。
もう1つの方法は、次のように、集計しようとしている4つの用語で構成される偽の用語を作成する単一の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(',')"
}
}
}
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加