質問の策定方法がわかりません。 私はElasticsearch 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に集約するスクリプトを使用し:
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"dim1": {
"terms": {
"script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
"size": 10
},
"aggs": {
"successful_transfers": {
"sum": {
"field": "header.successful_transfers"
}
}
}
}
}
}
だから今、凝集がheader.called_entity.uuidのいずれかから用語を生成している、またはheader.coverage_entity.uuid。
アグリゲーションキーの値を使用してアグリゲーションをフィルタリングするにはどうすればよいですか?たとえば、バケツごとに、uuidのドキュメントのうち、いくつかのドキュメントを数えたい場合は、header.called_entity.uuydから取得します。次のようなものがあります。
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"dim1": {
"terms": {
"script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
"size": 10
},
"aggs": {
"successful_transfers": {
"sum": {
"field": "header.successful_transfers"
}
},
"from_called_entity": {
"filter": {
"term": { "header.called_entity.uuid": BUCKET_KEY }
}
}
}
}
}
}
私の単純化された例ではうまくいくはずですが、called_entity、coverage_entity、both、および/または他のフィールドのブール条件である各集約に対してより複雑なフィルタを行う必要があります。とにかくありがとう...私はキーがスクリプトで少なくとも利用可能であることを望んでいたが、私はドキュメントや他の質問で何かを見つけることができなかったことを期待していた... – Raphael
実際には、(私は両方の集約サーバー側、 ElasticSearchからの応答を受け取った後)。どうもありがとう! – Raphael