ElasticSearchには、広範囲に3種類の集約があります。
バケット - さまざまなタイプの「バケット」を作成できます。 (データに「タイムスタンプ」タイプの列がある場合のdate_histogramの集計)、地理的な図形(データに経度/緯度がある場合の地理的ハッシュの集計)
メトリック - 合計、平均、最小、最大及びバケット又は外部バケット内で適用数値集計(最上位レベル)
パイプライン - これは実験的です。ある集約の出力を別の集約にフィードします。
同じレベル(他のバケット集約内の最上位の「aggs」要素またはネスト「aggs」のいずれか)に複数のバケット集約を含めることができます。バケット集約を相互にネストすることもできます。
メトリックアグリゲーションの場合、トップレベルの「aggs」要素または別のバケット集約の内側に配置できます。
例では、A、B、およびCがString型およびnot_analyzedフィールドの場合です。あなたはバケット集約を行うことができます。
{
"size": 0,
"aggs": {
"one": {
"terms": {
"field": "A"
},
"aggs": {
"two": {
"terms": {
"field": "B"
}
}
}
},
"aggs": {
"three": {
"terms": {
"field": "C"
}
}
}
}
}
"one"と "three"はトップレベルの用語集です。 "two"は "one"の内部にネストされています。
さらに、文書内にいくつかの数値フィールドがある場合。例えばDとEと言ってください。Aの各バケット内のDとBの各バケット内のDの合計、Bの各バケット内のEの合計を計算したいと思います.Cの各バケット内のDの合計1つのクエリで同時に1回の検索で...
{
"size": 0,
"aggs": {
"one": {
"terms": {
"field": "A"
},
"aggs": {
"sumOfDWithinA": {
"sum": {
"field": "D"
}
},
"two": {
"terms": {
"field": "B"
},
"aggs": {
"sumOfDWithinB": {
"sum": {
"field": "D"
}
},
"sumOfEWithinB": {
"sum": {
"field": "E"
}
}
}
}
}
},
"aggs": {
"three": {
"terms": {
"field": "C"
},
"aggs": {
"sumOfDWithinC": {
"sum": {
"field": "D"
}
}
}
}
}
}
}