2016-07-22 53 views
0

Ich bin dabei, den Weg zu finden, um Aggregationen auf einem Feld nach dem Filtern auf einem anderen Feld zu tun. Die Dokumentation zur Elastic-Suche ist jedoch nicht einfach zu verstehen.Aggregation auf einem Feld und die Summe in elasticsearch

Lets My Mapping sagen:

[ 
    { 
    a:'a1' 
    b:'b1' 
    c:120 
    d:12 
    }, 
    { 
    a:'a2' 
    b:'b1' 
    c:170 
    d:15 
    } 
    { 
    a:'a3' 
    b:'b2' 
    c:128 
    d:18 
    } 
    { 
    a:'a4' 
    b:'b1' 
    c:158 
    d:5 
    } 
] 

Erforderliche Aggregation:

Return the sum of field "c", by selecting the docs with "b" where b=b1 and d is less than 13 

Das ist nicht meine Anforderung, aber die Antwort hilft mir, die Dokumentation zu verstehen.

Antwort

1

Try this:

POST index/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "b": "b1" 
      } 
     }, 
     { 
      "range": { 
      "d": { 
       "lt": 13 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "total": { 
     "sum": { 
     "field": "c" 
     } 
    } 
    } 
} 
+0

Die Aggregationen im großen und ganzen Reihe von Dokumenten geschehen, aber ich wollte die Summe des Feld „c“ für die ausgewählten Dokumente mit dem Begriff „b“ und „d“ –

+0

Das ist, was das oben genannte tut. Die Abfrage wählt nur die Dokumente mit den Feldern "b" und "d" aus, die ihren jeweiligen Abfragen entsprechen, und die Aggregationen werden nur für diese Dokumente ausgeführt. Versuch es. – Val

+0

{ "aggs": { "total": { "sum": { "field": "c" } } } ....... auch den gleichen Wert wie die obige Abfrage zurückkehrt. Ich kann die Filterung hier nicht herausfinden. –