2016-11-11 4 views
2

Zum Beispiel meine Zuordnung einer Eigenschaft „itemDetails“ hat, wie dieseSumme Aggregation nicht für doppelte Daten arbeiten Elasticsearch

{ 
    "properties":{ 
    "itemDetails":{ 
     "properties":{ 
     "id1":{"type": "long"}, 
     "iddetailCode1": {"type": "string"}, 
     "id2":{"type": "long"}, 
     "iddetailCode2": {"type": "string"}, 
     "amount": {"type": "double"} 
     } 
    } 
    } 
} 

und für ein Einzelteil, hat es mehrere Datensätze. Ich möchte nach iddetailCode1 gruppieren und den gesamten Betrag zusammenfassen. Wenn jedoch zwei Rords den gleichen Betrag haben, wird es nur einmal berechnet, ich konnte nicht die richtigen Daten erhalten.

meine Abfrage ist so.

{ 
    "aggs": { 
    "user_likes": { 
     "terms": { 
     "field": "itemDetails.entityDetailCode1" 
     }, 
     "aggs": { 
     "likes_sum": { 
      "sum": { 
      "field": "itemDetails.amount" 
      } 
     } 
     } 
    } 
    } 
} 
+0

Bedingungen Aggregationen pro eindeutigen Wert schaffen einen Eimer sein, und die Zählungen in diesen Eimer sind nicht 100% genau. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html – Gavin

+0

Danke Gavin, ja, das ist, warum ich schließlich verschachtelte Aggregation, die uns geben könnte die genauen Ergebnisse. – Kazehaya

Antwort

1

Schließlich, ich habe die Lösung, in diesem Fall, wenn die Zuordnung setzen, müssen wir den Datentyp „itemDetails“ auf „verschachtelt“. "Der verschachtelte Typ ist eine spezielle Version des Objektdatentyps, die es ermöglicht, Arrays von Objekten unabhängig voneinander indizieren und abfragen zu können". Mapping sollte sein:

{ 
    "properties":{ 
    "itemDetails":{ 
     "type": "nested", 
     "properties":{ 
     "id1":{"type": "long"}, 
     "iddetailCode1": {"type": "string"}, 
     "id2":{"type": "long"}, 
     "iddetailCode2": {"type": "string"}, 
     "amount": {"type": "double"} 
     } 
    } 
    } 
} 

und Abfrage sollte

{ 
"aggs": { 
    "nestedName": { 
     "nested": { 
     "path": "itemDetails" 
     }, 
     "aggs": { 
     "Groupby": { 
      "terms": { 
      "field": "itemDetails.iddetailCode1", 
      "size": 50 
      }, 
      "aggs": { 
      "amount": { 
       "sum": { 
       "field": "itemDetails.amount" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
Verwandte Themen