2016-12-11 3 views
0

Der exists-Filter wurde in ES5.0 durch eine exists-Abfrage ersetzt.Wie erreicht man einen vorhandenen Filter auf ES5.0?

Also wie können wir erreichen, innerhalb der gleichen Abfrage das Äquivalent? Mit anderen Worten, wir wollen nicht zwei Abfragen durchführen, sondern nur für verschiedene Aggregationen, einschließlich der exists count?

Deshalb möchte ich die Anzahl der Zeit zählen, das Feld "the_field" existiert (oder ist nicht null)

"aggregation":{ 
    "exists_count":{ 
     "filter":{ 
     "exists":{ 
      "field":"the_field" 
     } 
     } 
    } 
} 

Antwort

0

Ich glaube, Sie Statistiken Aggregation verwenden können,

{ "aggs" : 
     { "time_stats" :    
      { "extended_stats" : 
      { "field" : "time" } 
      } 
     } 
} 

Blick auf elastic stats doc

0

Mit Elastic 5.0 wurden Filter nicht so sehr durch Abfragen ersetzt, sondern kombiniert. Syntaktisch sehen sie gleich aus, aber der Kontext, in dem Sie sie verwenden, bestimmt, ob sie als Abfrage (Faktoren in das Scoring) oder als Filter zum einfachen Aussortieren von Dokumenten interpretiert werden. Der Code unten sollte erreichen genau das, was Sie wollen.

{ 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "field_exists": { 
     "filter": { 
     "exists": { 
      "field": "name" 
     } 
     } 
    } 
    } 
} 

Die Aggregation zurückgegeben wird in etwa so aussehen, mit der doc_count die Anzahl der Dokumente darstellt, in dem die „Namensfeld existiert Hoffe, das hilft

{ 
    "aggregations": { 
    "field_exists": { 
     "doc_count": 11984 
    } 
    } 
} 
!
Verwandte Themen