2016-06-07 9 views
0

Ich habe 3 Felder, zum Beispiel field1, field2 und field3. Ich brauche so etwas zu schaffen:ElasticSearch Query mit Filter oder bool

if { field1 != 1 AND field2 != 1 AND field3 != 1 } OR if { field1 != 2 AND field2 != 2 AND field3 != 2 }

Ich versuchte es über zwei boolquery zu tun, aber es gibt mir nichts. Dann habe ich versucht, diese Abfragen in eine filter zu wickeln, aber es wirft immer Ausnahme no query defined for [filter]]. Aber mein boolquery für diesen Filter ist immer leer und es gibt mir nichts zurück. Kann ich etwas hinzufügen boolquery, um alle Ergebnisse abzurufen und sie dann zu filtern? Oder ich muss eine Abfrage auf andere Weise erstellen, aber wie?

+0

Welche Version von ES sind Sie? – Val

+0

@Val ES Version 1.5.2 – Squeez

Antwort

1

Hier ist, wie Sie tun können, es

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "or": [ 
      { 
      "and": [ 
       { 
       "not": { 
        "term": { 
        "field1": "1" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field2": "1" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field3": "1" 
        } 
       } 
       } 
      ] 
      }, 
      { 
      "and": [ 
       { 
       "not": { 
        "term": { 
        "field1": "2" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field2": "2" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field3": "2" 
        } 
       } 
       } 
      ] 
      } 
     ] 
     } 
    } 
    } 
} 
+0

Das funktioniert nicht für mich. Es findet nichts. Vielleicht liegt es daran, dass ich 1.5.2 ES verwende? – Squeez

+0

@Squeez Können Sie Ihre Indexzuordnung und auch die tatsächlichen Werte, die Sie negieren möchten, freigeben? (Ich vermute, es ist nicht 1 und 2). –

Verwandte Themen