2016-03-22 7 views
0

sagen Lets Ich stelle Dokumente in Elasticsearch, wie folgend:Elasticsearch - erhalten Dokumente, die einen Feldnamen haben

{ 
"name": "xyz", 
"address": { 
    "pincode": "111111", 
    "area": "downtown" 
    } 
} 

Ich möchte alle Dokumente erhalten, die pincode in ihnen haben. Natürlich haben einige Dokumente, die in ES eingegeben wurden, möglicherweise kein pincode Feld.

Ich habe versucht, mit so etwas, war aber erfolglos:

XGET _search 
{ 
    "query": { 
     "terms": { 
     "_field_names": [ "pincode" ] 
     } 
    } 
} 

Antwort

1

Sie müssen die missing filter verwenden. Die exists filter funktioniert nicht, wenn das Feld in Ihrem Dokument insgesamt fehlt.

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "missing": { 
       "field": "address.pincode" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Was meinst du mit "wird nicht funktionieren"? Cheked es jetzt mit Feld, das insgesamt fehlt und es gab null Treffer (wie erwartet). – DrTyrsa

1

Sie benötigen exists Abfrage.

{ 
    "query" : { 
     "filtered" : { 
      "filter" : { 
       "exists" : { "field" : "address.pincode" } 
      } 
     } 
    } 
} 
+1

beachten Sie nur, dass die Verwendung der 'filtered' Abfrage [ist veraltet] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query .html) in 2.0. Wenn Sie ES 2.x verwenden, sollten Sie ['bool/must 'oder' bool/filter'] verwenden (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl -bool-query.html) statt. – Val

+0

Es passiert nicht. Ich benutze 1.7.1. Muss ich eine Art Mapping durchführen, um ES mitzuteilen, dass ich diese Felder vorher durchsuchen werde? Ich bin neu in ES. – spiralarchitect

+0

@spiralarchitect Beantwortete die Antwort, bitte überprüfen Sie jetzt. – DrTyrsa

Verwandte Themen