2017-03-27 4 views
1

Ich möchte meine elasticsearch abfragen (mit einer Python-Bibliothek) und ich möchte etwas von dem Dokument zu filtern. Da will ich nicht eine Partitur habe ich nur Filter bin mit und nicht Schlüsselwort muss:Oder in einem Elasticsearch-Filter

{ 
     "_source": ["entities"], 
     "query": { 
      "bool": { 
       "must_not": [ 
        {"exists": {"field": "retweeted_status"}} 
       ], 
       "filter": [ 
        {"match": {"entities.urls.display_url": "blabla.com"}}, 
        {"match": {"entities.urls.display_url": "blibli.com"}}] 
      } 
     } 
    } 

Dies ist die Abfrage, die ich getan habe, aber das Problem ist, dass in dem gleichen Filter, es ist offenbar ein AND Betrieb, dass ist wirksam. Ich möchte, dass es ein OR ist. Wie kann ich meine Abfrage alle um das Dokument zu haben ändern, die „blibli.com“ OR „blabla.com“

+0

Versuchen Sie, wenn ['sollte'] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) anstelle von' Filter' gibt Ihnen das gewünschte Ergebnis. – Pit

+0

@Pit sollte eine Bewertung in meiner Abfrage implizieren und ich möchte es nicht verlangsamen – mel

Antwort

2

Sie können Nest bool innerhalb eines anderen bool enthalten, so können Sie Abfrage wie folgt schreiben:

{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "exists": { 
      "field": "retweeted_status" 
      } 
     } 
     ], 
     "filter": [ 
     { 
      "bool": { 
      "should": [ 
       { 
       "match": { 
        "entities.urls.display_url": "blabla.com" 
       } 
       }, 
       { 
       "match": { 
        "entities.urls.display_url": "blibli.com" 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

Getestet auf ES 5.3 können Sie Explain API verwenden, um zu überprüfen, ob dies auch in Ihrer Version von Elasticsearch funktioniert.

Verwandte Themen