友達、
何億ものドキュメントから一意のペアを見つけるために分析を行っています。モックの例は次のとおりです。
ドキュメント フィールド1 フィールド2
- AAA:BBB
- AAA : CCC
- PPP : QQQ
- PPP : QQQ
- XXX : YYY
- XXX : YYY
- MMM : NNN
ドキュメントの 90% には、上記のドキュメント 3、4、5、6、および 7 に示されているような一意のペアが含まれていますが、集計結果には関心がありません。ドキュメント 1 と 2 を集約することに興味があります。
用語集計クエリ:
"aggs": { "f1": { "条項": { "フィールド": "FIELD1", "min_doc_count": 2 }、 "aggs": { "f2": { "条項": { 「フィールド」:「FIELD2」 } } } } }
ターム集計結果
"集計": { "f1": { "バケツ": [ { "キー": "PPP", "doc_count": 2, "f2": { "バケツ": [ { "キー": "QQQ", "doc_count": 2 } ] } }、 { "キー": "XXX", "doc_count": 2, "f2": { "バケツ": [ { 「キー」:「YYY」、 "doc_count": 2 } ] } }、 { "キー": "AAA", "doc_count": 2, "f2": { "バケツ": [ { "キー": "BBB", "doc_count": 1 }、 { "キー": "CCC", "doc_count": 1 } ] } } ] } }
集計結果に含まれるキーAAAのみに関心があります。異なるペアを含む集計結果をフィルタリングする最良の方法は何ですか?
ユニークな値のカウントを結果とするカーディナリティ集計を試しました。ただし、集計結果から興味のないものを除外することはできません。
カーディナリティ集計クエリ
"aggs": { "f1": { "条項": { "フィールド": "FIELD1", "min_doc_count": 2 }、 "aggs": { "f2": { "カーディナリティ": { 「フィールド」:「FIELD2」 } } } } }
カーディナリティ集計結果
"集計": { "f1": { "バケツ": [ { "キー": "PPP", "doc_count": 2, "f2": { 「値」: 1 } }、 { "キー": "XXX", "doc_count": 2, "f2": { 「値」: 1 } }、 { "キー": "AAA", "doc_count": 2, "f2": { 「値」: 2 } } ] } }
少なくとも基数で並べ替えることができれば、回避策を見つけるのに役立ちます。この点で私を助けてください。
PS: 集計結果を後処理/フィルター処理するための spark/mapreduce プログラムを作成しても、この問題の解決策は期待できません。