2016-05-09 4 views
2

弾性検索のフィールドに複数のネストされていない集計を行う方法はありますか?私はすべての集計を子どもまたは親であるが、同じレベルにしたい。複数のネストされていない集計

{ 
    "size": 0, 
    "aggs": { 
     "one": { 
      "terms": { 
       "field": "A" 
      }, 
      "aggs": { 
       "two": { 
        "terms": { 
         "field": "B" 
        }, 
        "aggs": { 
         "three": { 
          "terms": { 
           "field": "C" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

答えて

0

このように、用語集合は同じ文書内の複数のフィールドから用語を収集することをサポートしていません。また、複数のフィールド間で用語aggを実行するために使用できる2つのアプローチがあります。スクリプトの場合はcopy、フィールドの場合はcopy_toです。

1

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" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
関連する問題