2015-10-01 8 views
12

クエリと一致するネストされたオブジェクトの値だけを合計する必要があります。 ElasticSearchはクエリに一致するドキュメントを決定し、次にすべてのネストされたオブジェクトを合計します。以下の概要から、nestedobjects.objtype = "A"を検索し、一致するネストされたオブジェクトのobjvalueの合計を戻したいと思っています。これは可能ですか?もしそうなら、どうですか?ここでElasticSearchで集計されたネストされたオブジェクトの値のみを集計します。

マッピング

ここ
{ 
    "myindex": { 
    "mappings": { 
     "mytype": { 
     "properties": { 
      "nestedobjects": { 
      "type": "nested", 
      "include_in_parent": true, 
      "properties": { 
       "objtype": { 
       "type": "string" 
       }, 
       "objvalue": { 
       "type": "integer" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

は私の文書は

PUT /myindex/mytype/1 
{ 
    "nestedobjects": [ 
    { "objtype": "A", "objvalue": 1 }, 
    { "objtype": "B", "objvalue": 2 } 
    ] 
} 
PUT /myindex/mytype/2 
{ 
    "nestedobjects": [ 
    { "objtype": "A", "objvalue": 3 }, 
    { "objtype": "B", "objvalue": 3 } 
    ] 
} 

ここに私のクエリコードがありますさ。

POST allscriptshl7/_search?search_type=count 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": "nestedobjects.objtype:A" 
     } 
     } 
    } 
    }, 
    "aggregations": { 
    "my_agg": { 
     "sum": { 
     "field": "nestedobjects.objvalue" 
     } 
    } 
    } 
} 

答えて

7

両方の(外側の)文書がその内部文書の1つは、クエリと一致することを条件と一致しているので、両方の外側の文書が返され、そして凝集はこれらの外側の文書に属する内部文書の全てに対して計算されます。ホウ

とにかく、これはfilter aggregationを使用して、私が思うに、あなたが希望しているものをやっているようだ:非常によく

http://sense.qbox.io/gist/c1494619ff1bd0394d61f3d5a16cb9dfc229113a

POST /myindex/_search?search_type=count 
{ 
    "aggs": { 
     "nested_nestedobjects": { 
     "nested": { 
      "path": "nestedobjects" 
     }, 
     "aggs": { 
      "filtered_nestedobjects": { 
       "filter": { 
        "term": { 
        "nestedobjects.objtype": "a" 
        } 
       }, 
       "aggs": { 
        "my_agg": { 
        "sum": { 
         "field": "nestedobjects.objvalue" 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 
... 
{ 
    "took": 4, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 2, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "nested_nestedobjects": { 
     "doc_count": 4, 
     "filtered_nestedobjects": { 
      "doc_count": 2, 
      "my_agg": { 
       "value": 4, 
       "value_as_string": "4.0" 
      } 
     } 
     } 
    } 
} 
ここ

は、私はそれをテストするために使用されるいくつかのコードですところで、構造化された質問。

+0

ありがとう、私は少しでそれをテストします。 – user481779

+0

広告されたとおりに動作します! – user481779

+1

実際の解決策はありません:フィルターの既知の値に依存し、ヒストグラム、日付ヒストグラム、または予期しないキーを持つ用語では機能しません。 – Sebastian

関連する問題