質問の策定方法がわかりません。 私はElasticsearch 2.2を使用しています。弾性検索:2つのフィールドに集約
は5つの文書で作られたデータセットの例で始まるのをしてみましょう:
[
{
"header": {
"called_entity": { "uuid": "a" },
"coverage_entity": {},
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "a" },
"coverage_entity": { "uuid": "b" },
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "b" },
"coverage_entity": { "uuid": "a" },
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "b" },
"coverage_entity": { "uuid": "a" },
"sucessful_transfers": 0
}
}
]
called_entityは常にUUIDを持っています。 coverage_entityは空でもよく、uuidであってもよい。私が欲しいもの
はがをcalled_entity.uuidかをcoverage_entity.uuid、その後、文書やsuccessful_transfersの和の合計量をカウントのいずれかに集約することです。 ので、これらの5つのドキュメントのために、私は結果としてそのようなものがあるでしょう:
uuid,doc_count,successful_transfers_count
"a",4,3
"b",3,2
問題は、それが同じ文書は、いくつかの集計で使用することができる手段がある限り集約キーはのいずれかであるとしてcalled_entity.uuidまたはcoverage_entity.uuuid(私はそれが可能かどうかはわかりません、なぜ私はここに掲載しているのですか)。単にに集約されて私が現在やっている
はフィールドをcalled_entity.uuidが、十分ではありません、もちろん:
uuid,doc_count,successful_transfers_count
"a",2,2
"b",2,1
:
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"dim_1": {
"terms": {
"field": "header.called_entity.uuid",
"size": 0
},
"aggs": {
"successful_transfers": {
"sum": {
"field": "header.successful_transfers"
}
}
}
}
}
}
私のようなものを提供します。 ..私が望むものではない。だから、いくつかの値を集計するには、特定の集計に対してまたはを集計することができます。集計の文書だけでなく、すべての文書にある値に基づいてデータを計算しますか?
ありがとうございます。
... Damn。できます。どうもありがとうございます。どのように動作しているのか正確に説明できますか? – Raphael
この集約は、両方のフィールドから、そのスクリプトを使用する 'called_entity.uuid'と' coverage_entity.uuid'という用語を生成します。あなたの集計は1つのフィールドだけを見ていて、あなたが言ったように、両方の値を同時に必要とします。 –
さて、私は内部的にどのように動作するのか分かりました。どうもありがとうございました。 – Raphael