2016-07-18 6 views
0

existiert ich eine Elasticsearch Abfrage tue, dass alle Dokument herausfiltert, in denen ein bestimmtes FeldElasticsearch: Filter Dokumente auf fehlendes Feld, es sei denn anderes Feld

über fehlt
query: { 
    filtered: { 
    filter: { 
     bool: { 
     should: { 
      bool: { 
      must: { 
       term: 'someCondition' 
      }, 
      must_not: { 
       missing: {field: 'somefield'} 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Dies funktioniert wie erwartet. Jetzt muss ich diesen missing Filter bedingt machen, damit er nur zusammenpasst, wenn ein anderes Feld nicht existiert.

habe ich versucht, meine must_not einen should wie diese Umwandlung:

should: { 
    missing: {field: 'somefield'}, 
    exists: {'field': 'somotherfield'} 
} 

Aber das scheint nicht zu funktionieren.

Um zu klären: "von docs SELECT * WHERE (somefield NOT NULL ODER someotherfield IS NOT NULL)"

+0

Und wenn Sie es schreiben, Sie plötzlich sehen wie es sein soll ... 'sollte: [[{existiert: {field: somefield}}, {exists: {field: 'someotherfield'}}]]' –

Antwort

0

Try Abfrage wie folgt:

"filters" : [ { 
"missing" : { 
     "field" : "somefield" 
    } 
}, { 
    "not" : { 
    "filter" : { 
     "missing" : { 
     "field" : "somotherfield" 
     } 
    } 
    } 
} ] 
Verwandte Themen