2016-08-18 12 views
1

Elasticsearchバージョンは動作しません:2.3.3Elasticsearch:深いネストされた集約下reverse_nested集約は

を基本的にタイトルがすべてを語っています。 2番目のネストされた集計の下でreverse_nestedが使用されている場合、ドキュメントはreverse_nested(結果の最後の"doc_count"フィールドを参照)によってスコープされているように見えますが、それに続く集計は何とか機能しません。

私は例を用意しました。文書は、登録日と試験の履歴を持つ学生です。

マッピング:

{ 
    "mappings": { 
     "students": { 
      "properties": { 
       "name": { 
        "type": "string"}, 
       "enrollment": { 
        "type": "date"}, 
       "exam_histories": { 
        "type": "nested", 
        "properties": { 
         "date": { 
          "type": "date"}, 
         "subjects": { 
          "type": "nested", 
          "properties": { 
           "name": { 
            "type": "string"}, 
           "score": { 
            "type": "short"}}}}}}}}} 

テストドキュメント:

{ 
    "name": "John", 
    "enrollment": "2012-09-01T00:00:00+00:00", 
    "exam_histories": [ 
     { 
      "date": "2016-05-05T00:00:00+00:00", 
      "subjects": [ 
       { 
        "name": "math", 
        "score": 90}]}]} 

集計クエリ(実際の意味が意図されていない):

{ 
    "aggs": { 
     "nested_exam_histories": { 
      "nested": { 
       "path": "exam_histories"}, 
      "aggs": { 
       "date_buckets": { 
        "date_histogram": { 
         "field": "exam_histories.date", 
         "interval": "day"}, 
        "aggs": { 
         "this_reverse_nested_does_work": { 
          "reverse_nested": {}, 
          "aggs": { 
           "newest_enrollment": { 
            "max": { 
             "field": "enrollment"}}}}, 
         "deep_nested_subjects": { 
          "nested": { 
           "path": "exam_histories.subjects"}, 
          "aggs": { 
           "score_buckets": { 
            "terms": { 
             "field": "exam_histories.subjects.score"}, 
            "aggs": { 
             "this_reverse_nested_doesnt_work": { 
              "reverse_nested": {}, 
              "aggs": { 
               "newest_exam_date": { 
                "max": { 
                 "field": "exam_histories.date"}}}}}}}}}}}}}} 

そして結果:

... 
"aggregations" : { 
    "nested_exam_histories" : { 
     "doc_count" : 1, 
     "date_buckets" : { 
     "buckets" : [ { 
      "key_as_string" : "2016-05-05T00:00:00.000Z", 
      "key" : 1462406400000, 
      "doc_count" : 1, 
      "this_reverse_nested_does_work" : { 
      "doc_count" : 1, 
      "newest_enrollment" : { 
       "value" : 1.3464576E12, 
       "value_as_string" : "2012-09-01T00:00:00.000Z" 
      } 
      }, 
      "deep_nested_subjects" : { 
      "doc_count" : 1, 
      "score_buckets" : { 
       "doc_count_error_upper_bound" : 0, 
       "sum_other_doc_count" : 0, 
       "buckets" : [ { 
       "key" : 90, 
       "doc_count" : 1, 
       "this_reverse_nested_doesnt_work" : { 
        "doc_count" : 1, 
        "newest_exam_date" : { 
        "value" : null 
        } 
... 

...「newest_exam_date」という集計が機能していないことがわかります。それはバグですか、何か間違っていますか?

答えて

1

pathオプションを使用してネストされたオブジェクトを明示的に指定する必要があります。そうでない場合は、フィールドがルートレベルにあるとみなされます。 documentationから

パス - ネストされたオブジェクトのフィールドが バックに入社すべきかを定義します。デフォルトは空です。つまり、ルート /メイン文書レベルに戻ってきます。パスはreverse_nestedネストされた集合のネストされた 構造外れるネストさ オブジェクトのフィールドへの参照を含めることはできませんである 例:

{ 
    "size":0, 
    "aggs": { 
     "nested_exam_histories": { 
     "nested": { 
      "path": "exam_histories" 
     }, 
     "aggs": { 
      "date_buckets": { 
       "date_histogram": { 
        "field": "exam_histories.date", 
        "interval": "day" 
       }, 
       "aggs": { 
        "this_reverse_nested_does_work": { 
        "reverse_nested": {}, 
        "aggs": { 
         "newest_enrollment": { 
          "max": { 
           "field": "enrollment" 
          } 
         } 
        } 
        }, 
        "deep_nested_subjects": { 
        "nested": { 
         "path": "exam_histories.subjects" 
        }, 
        "aggs": { 
         "score_buckets": { 
          "terms": { 
           "field": "exam_histories.subjects.score" 
          }, 
          "aggs": { 
           "this_reverse_nested_doesnt_work": { 
           "reverse_nested": { 
            "path": "exam_histories" 
           }, 
           "aggs": { 
            "newest_exam_date": { 
             "max": { 
              "field": "exam_histories.date" 
             } 
            } 
           } 
           } 
          } 
         } 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

結果:

{ 
    "took": 5, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 2, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "nested_exam_histories": { 
     "doc_count": 2, 
     "date_buckets": { 
      "buckets": [ 
       { 
        "key_as_string": "2016-05-05T00:00:00.000Z", 
        "key": 1462406400000, 
        "doc_count": 2, 
        "this_reverse_nested_does_work": { 
        "doc_count": 2, 
        "newest_enrollment": { 
         "value": 1377993600000, 
         "value_as_string": "2013-09-01T00:00:00.000Z" 
        } 
        }, 
        "deep_nested_subjects": { 
        "doc_count": 2, 
        "score_buckets": { 
         "doc_count_error_upper_bound": 0, 
         "sum_other_doc_count": 0, 
         "buckets": [ 
          { 
           "key": 90, 
           "doc_count": 2, 
           "this_reverse_nested_doesnt_work": { 
           "doc_count": 2, 
           "newest_exam_date": { 
            "value": 1462406400000, 
            "value_as_string": "2016-05-05T00:00:00.000Z" 
           } 
           } 
          } 
         ] 
        } 
        } 
       } 
      ] 
     } 
     } 
    } 
} 

pathの第2の「逆アグリゲーション」のオプション:

reverse_nested": { 
    "path": "exam_histories" 
} 
関連する問題