2016-03-28 10 views
0

私のドキュメントタイプは次のとおりです。車両はネストされたタイプです。Elasticsearchネストされた出力バケットの集約

文書1 -

{ 
    "customerAge": 30, 
    "vehicles": [ 
    { 
     "brand": "Altima", 
     "year": 2005 
    }, 
    { 
     "brand": "Corolla", 
     "year": 2006 
    }, 
    { 
     "brand": "Camry", 
     "year": 2005 
    } 
    ] 
} 

文書2 -

{ 
    "customerAge": 50, 
    "vehicles": [ 
    { 
     "brand": "Altima", 
     "year": 2009 
    }, 
    { 
     "brand": "Corolla", 
     "year": 2010 
    } 
    ] 
} 

私は車のブランドのバケットを作成し、顧客の年齢の平均値を計算しようとしています。したがって、この例では、 "Altima"バケットの平均顧客年齢は40になります。

私はこのクエリを試しましたが、平均値はnullです。

私は間違って何を手伝ってもらえますか?

{ 
    "size": 0, 
    "aggs": { 
     "nestedtop": { 
     "nested": { 
      "path": "vehicles" 
     }, 
     "aggs": { 
      "3cc601456260531278": { 
       "terms": { 
        "field": "vehicles.brand" 
       }, 
       "aggs": { 
        "expfilter_yromb0g90dmjx20529": { 
        "filter": { 
         "match_all": {} 
        }, 
        "aggs": { 
         "yromb0g90dmjx20529": { 
          "min": { 
           "field": "customerAge" 
          } 
         } 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

答えて

0

ネストされたアグリゲーションは、ネストされたドキュメント内のフィールドのみにアクセスできます。ルートドキュメント内または異なる入れ子になったドキュメント内のフィールドは表示されません。しかし、ネストされたスコープからステップアウトして、reverse_nested aggregationの親に戻ることができます。

{ 
    "size": 0, 
    "aggs": { 
     "nestedtop": { 
      "nested": { 
       "path": "vehicles" 
      }, 
      "aggs": { 
       "by_name": { 
        "terms": { 
         "field": "vehicles.brand" 
        }, 
        "aggs": { 
         "age_reverse": { 
          "reverse_nested": {}, 
          "aggs": { 
           "avg_age": { 
            "avg": { 
             "field": "customerAge" 
            } 
           } 
          } 
         } 
        } 

       } 
      } 
     } 
    } 
} 
+0

reverse_nestedは高価な操作ですか? – user3658423

+0

私はそうは思わない。ネストしたスコープを親のドキュメントに変更するだけです – Rahul

+0

ソリューションのご協力ありがとうございます! – user3658423

関連する問題