2015-05-07 17 views
32

Ich versuche, ElasticSearch Abfrage zu IN \ NOT in SQL zu finden.ElasticSearch: IN äquivalenter Operator in ElasticSearch

Ich weiß, wir können QueryString Abfrage mit mehreren OR verwenden, um die gleiche Antwort zu erhalten, aber das endet mit vielen ORs.

Kann jemand das Beispiel teilen?

+0

http://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-terms-query.html –

Antwort

42

Ähnlich wie das, was Chris als Kommentar vorgeschlagen hat, ist der analoge Ersatz für IN der termsfilter (Abfragen implizieren das Scoring, was die zurückgegebene Reihenfolge verbessern kann).

SELECT * FROM table WHERE id IN (1, 2, 3); 

Die äquivalente Elasticsearch 1.x Filter wären:

{ 
    "query" : { 
    "filtered" : { 
     "filter" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

Die äquivalente Elasticsearch 2.x + Filter wären:

{ 
    "query" : { 
    "bool" : { 
     "filter" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

Das wichtige ist, dass die Mitnehmen terms Filter (und Abfrage für diese Angelegenheit) arbeiten an genauen Übereinstimmungen. Es ist implizit ein or Betrieb, ähnlich wie IN.

Wenn Sie es invertieren möchten, können Sie die Verwendung nicht filtern, aber ich würde vorschlagen, die etwas ausführlicher bool/must_not-Filter (um die Gewohnheit, auch bool/must und bool verwenden).

{ 
    "query" : { 
    "bool" : { 
     "must_not" : { 
     "terms" : { 
      "id" : [1, 2, 3] 
     } 
     } 
    } 
    } 
} 

Insgesamt ist die Verbindung bool Abfragesyntax ist , ebenso wie die term (Singular) und terms Filter (Plural, wie gezeigt).

+1

Danke! Es hat für mich funktioniert! –

+0

10/10 Antwort. Einfach und direkt auf den Punkt. – Watercolours