2016-10-15 11 views
0

私はfxyグループの下で一緒にgxElasticSearch:ネストされた集約が、ルートdoc_countを取得

User: { 
    g1: { 
    f11: ..., 
    f12: ..., 
    f13: ... 
    }, 
    g2: { 
    f21: ..., 
    f22: ..., 
    f23: ... 
    } 
} 

をグループ化されたプロパティの集まりです、ユーザデータmondelは、以下のようなものです、インデックスに一部のユーザープロパティをElasticSearchを使用していますだから私は、ネストされた集約

{ 
    "query": { 
    ... 
    }, 
    "aggs": { 
    "l1": { 
     "nested": { 
     "path": "g1" 
     }, 
     "aggs": { 
     "l2": { 
      "terms": { 
      "field": "g1.f11" 
      } 
     } 
     } 
    } 
    } 
} 

を使用してf11の上位N個の結果を得ることができ、応答が

のようなものです

私の問題は、gxfxy=kzの数字です。ネストされた集約のすべてのdoc_countは数字です。少なくとも1つのgxfxy=kzを満たすユーザー数を取得する方法はありますか?

答えて

0

現在我々の回避策は、

  • バックの一部として上位N個の結果を適用する最初のネストされた集合を使用して、f11の上位N個の結果のルートレベルのオブジェクト
  • クエリにネストされたオブジェクト内

    • 重複データでありますクエリフィルタを使用して、最初のレベルのフィールドに集計します。次いでg1_f11

      { 
          "query": { 
          "nested": { 
           "path": "g1", 
           "query": { 
           "should": [ 
            { 
            "match": { 
             "g1" { 
             "query": "k1" 
             }    
            } 
            }, 
            { 
            "match": { 
             "g1" { 
             "query": "k2" 
             }    
            } 
            }, 
            ... 
           ] 
           } 
          } 
          }, 
          "aggs": { 
          "l1": { 
           "terms": { 
           "fields": "g1_f11" 
           } 
          } 
          } 
      } 
      

      にフィルタの一部、及び骨材として適用し、フィールドf11ための上位N個の結果を得る

      User: { 
          g1_f11: [], 
          g1_f12: [], 
          ... 
          g2_f21: [], 
          g2_f22: [], 
          ..., 
          g1: { 
          f11: ..., 
          f12: ..., 
          f13: ... 
          }, 
          g2: { 
          f21: ..., 
          f22: ..., 
          f23: ... 
          } 
      } 
      

      へのマッピングを変更

      を意味

    集計出力の最後のdoc_countはユーザー数になります

  • 0

    ElasticSearchが解決策を提供していることが分かった。reverse nested aggregation。それはまさに私たちが望むものです。

    関連する問題