2014-01-18 4 views
18

Ich bin ziemlich neu in Elasticsearch, also hier ist meine Frage. Ich möchte eine Suchanfrage mit elasticsearch machen und mit mehreren Begriffen filtern.Elasticsearch Multi-Term-Filter

Wenn ich nach einem Benutzer 'tom' suchen möchte, dann hätte ich gerne alle Übereinstimmungen, bei denen der Benutzer 'isActive = 1', 'isPrivate = 0' und 'isOwner = 1' ist.

Hier ist meine Suchanfrage

"query":{ 
    "filtered": { 
     "query": { 
      "query_string": { 
       "query":"*tom*", 
       "default_operator": "OR", 
       "fields": ["username"] 
      } 
     }, 
     "filter": { 
      "term": { 
       "isActive": "1", 
       "isPrivate": "0", 
       "isOwner": "1" 
      } 
     } 
    } 
} 

Wenn ich 2 Begriffe verwenden, es funktioniert wie ein Charme, aber wenn ich 3 Begriffe verwenden Sie es nicht.

Danke für die Hilfe !!

Antwort

41

Sie sollten bool filter-AND alle Begriffe verwenden:

"query":{ 
    "filtered": { 
     "query": { 
      "query_string": { 
       "query":"*tom*", 
       "default_operator": "OR", 
       "fields": ["username"] 
      } 
     }, 
     "filter": { 
      "bool" : { 
       "must" : [ 
        {"term" : { "isActive" : "1" } }, 
        {"term" : { "isPrivate" : "0" } }, 
        {"term" : { "isOwner" : "1" } } 
       ] 
      } 
     } 
    } 
} 
+12

Dies hängt ganz von der Woche und kleinere Version von Elasticsearch Sie verwenden. Die Mondphase kann ebenfalls Auswirkungen haben. Die Syntax dafür hat sich öfter geändert, als Donald Trump Immigranten beleidigt hat. –

+0

Ich frage mich, warum es eine solche Inkonsistenz zwischen elastischen Versionen gibt. –

+0

Vielen Dank diese Antwort ist wirklich hilfreich. –