2016-08-18 3 views
1

Elasticsearch Version: 2.3.3Elasticsearch: reverse_nested Aggregation unter tief verschachtelten Aggregation funktioniert nicht

Grundsätzlich ist der Titel alles sagt. Wenn reverse_nested unter der zweiten verschachtelten Aggregation verwendet wird, obwohl die Dokumente scheinen mit Hilfe von reverse_nested (siehe das letzte Feld "doc_count" im Ergebnis), die folgenden Aggregationen funktionieren irgendwie nicht.

Hier habe ich ein Beispiel vorbereitet - ein Dokument ist ein Student mit Einschreibungsdatum und Prüfungsgeschichten.

Mapping:

{ 
    "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"}}}}}}}}} 

Das Testdokument:

{ 
    "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}]}]} 

Die Aggregation Abfrage (keine tatsächliche Bedeutung soll):

{ 
    "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"}}}}}}}}}}}}}} 

Und das Ergebnis:

... 
"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 
        } 
... 

... wo die Aggregation "next_exam_date" nicht funktioniert. Ist es ein Fehler oder mache ich etwas falsch?

Antwort

1

Man müsste explizit das verschachtelte Objekt spezifizieren, das man mit der Option path "reverse-aggregieren" möchte, ansonsten nimmt es an, dass das Feld auf der Stammebene ist.

Vom documentation:

Weg - Welche, was Feld verschachteltes Objekt definiert sollte wieder verbunden werden. Der Standardwert ist leer, was bedeutet, dass er sich wieder mit dem Stammverzeichnis /Hauptdokumentenebene verbindet. Der Pfad kann einen Verweis auf ein verschachteltes Objektfeld enthält, die außerhalb der verschachtelten Aggregation der verschachtelten Struktur fällt eine reverse_nested ist in . Beispiel:

{ 
    "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" 
             } 
            } 
           } 
           } 
          } 
         } 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Ergebnisse:

{ 
    "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" 
           } 
           } 
          } 
         ] 
        } 
        } 
       } 
      ] 
     } 
     } 
    } 
} 

Note die path Option in der zweiten "umgekehrten aggregation":

reverse_nested": { 
    "path": "exam_histories" 
} 
Verwandte Themen