2017-04-03 14 views
1

ネストされたデータ型のクエリがあり、ネストされたデータ型の統計集計(クエリによってフィルタリングされたもの)を返したいとします。ここでは、コードです:返さElasticsearchスコープネストされた集計をクエリ

GET dan-created/_search 
{ 
    "_source" : ["m_iID", "m_iYear"], 
    "query": { 
     "nested": { 
     "path": "m_PeopleList", 
     "query": { 
      "match": { 
       "m_PeopleList.name": "Daniel" 
      } 
     }, 
     "inner_hits" : {} 
     } 
    }, 
    "aggregations" : { 
    "people" : { 
     "nested" : { 
      "path" : "m_PeopleList" 
     }, 
     "aggregations" : { 
      "averageDist": { 
      "stats" : { 
       "field":"m_PeopleList.value" 
      } 
      } 
     } 
    } 
    } 
    } 

統計は、インデックス全体のためのものですが、私は彼らが唯一の上記のクエリからの一致を返したいです。私はこの他の例を見たことがありますが、最新版のelasticsearchでは見当たりませんでした。

おかげで、 ダニエル

答えて

0

あなたはfilter aggregation

"aggregations" : { 
    "people" : { 
     "nested" : { 
     "path" : "m_PeopleList" 
     }, 
     "aggregations" : { 
     "myFilter": { 
      "filter" : { "match": { "m_PeopleList.name": "Daniel" } }, 
      "aggregations": { 
      "averageDist": { 
       "stats" : { 
       "field":"m_PeopleList.value" 
       } 
      } 
      } 
     } 
     } 
    } 
} 
+0

を使用することができ、私が望むようはい、これは動作します。フィルタのクエリを2回指定することなくこれを行う方法があると私は考えていました。しかし、集計が必要な場合は、クエリセクションを削除して「サイズ」を追加することができます:0。ありがとう! – danieljames

+0

'ネストされた'ドキュメントがなければ、フィルタは一度しか定義できません。 しかし、集計とクエリは同じ 'nested'節を共有していないので、それを2回(size!= 0で)定義しなければなりません。 – ulric260