2016-08-02 3 views
1

たとえば、弾性検索でフィルタを使用して集計する必要があります。 私はESで、ネストした型としてインデックス付けされる。ここネストされたフィールドの上に弾性検索でフィルタを使用して集計するクエリ

{ 
"id":1, 
"name":"1", 
"url":"1png20160612115249190.png", 
"description": "this is a good asset", 
"alt_sizes": ["hi","yes"], 
"tags":[{ "id":"1", "name":"Movies"}, 
    { "id":"2", "name":"Sports"}], 
"packs":[{ "id":"1", "name":"pack1", "partnerId":"1"}, 
    { "id":"2", "name":"pack2 test", "partnerId":"2"}], 
"category":[{ "id":"1", "name":"cat1"}, 
    { "id":"2", "name":"cat2"}], 
"appPartner":[{ "id":"1", "name":"par1"}, 
     { "id":"2", "name":"par2"}], 
"created_time":"2016-07-26 00:00:00", 
"updated_time":"2016-07-26 10:45:43" 
} 

パックとして、文書等の弾性検索に保存されている資産を持っています。 パックには、id、name、およびpartnerIdの配列があります。 は今、私が何をしたい私はこのクエリは、すべてのネストされたパックの上に集約私を与えるこのクエリに

{ 
    "size":0, 
    "query": { 
    "nested": { 
        "path":"appPartner", 
        "query": { 
        "bool": { 
         "must": [ 
         {"match": {"appPartner.id": "1"}} 
         ] 
        } 
        } 
       } 
    }, 
    "aggs": { 
     "packs" : { 
      "nested" : { 
       "path" : "packs" 
      }, 
      "aggs" : { 
       "id" : { 
        "terms" : { 
         "field" : "packs.id" 
        } 
       , 
       "aggs":{ 
        "name":{ 
        "terms" : { 
          "field" : "packs.name" 
         } 
        } 
      } 
      } 
      }  

     } 
    } 
} 

を試してみました= 10

PARTNERID持つすべてのパックをしたいのような特定のPARTNERIDとパックに集約することですids。私は= PARTNERIDで、ネストされたすべてのpackidsを超える集約する必要がある

答えて

1
"aggs": { 
    "packs": { 
     "nested": { 
     "path": "packs" 
     }, 
     "aggs": { 
     "partner": { 
      "filter": { 
      "term": { 
       "packs.partnerId": "10" 
      } 
      }, 
      "aggs": { 
      "id": { 
       "terms": { 
       "field": "packs.id" 
       }, 
       "aggs": { 
       "name": { 
        "terms": { 
        "field": "packs.name" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
これを実行し、それが働いはい
+0

おかげで、感謝 – Nipun

+0

を動作するかどうかを確認します – Nipun

関連する問題