2014-04-01 8 views
7

Ich habe eine Liste, ein Array oder eine andere Ihnen bekannte Sprache. Z.B. Namen: ["John","Bas","Peter"] und ich möchte das name Feld abfragen, wenn es einem dieser Namen entspricht.Elasticsearch Matchliste gegen Feld

Ein Weg ist mit OR-Filter. z.B.

{ 
    "filtered" : { 
     "query" : { 
      "match_all": {} 
     }, 
     "filter" : { 
      "or" : [ 
       { 
        "term" : { "name" : "John" } 
       }, 
       { 
        "term" : { "name" : "Bas" } 
       }, 
       { 
        "term" : { "name" : "Peter" } 
       } 
      ] 
     } 
    } 
} 

Jeder schickere Weg? Besser, wenn es sich um eine Abfrage als um einen Filter handelt.

Antwort

14
{ 
    "query": { 
    "filtered" : { 
     "filter" : { 
     "terms": { 
      "name": ["John","Bas","Peter"] 
     } 
     } 
    } 
    } 
} 

Welche Elasticsearch umschreibt, als ob Sie hat diese ein verwendet

{ 
    "query": { 
    "filtered" : { 
     "filter" : { 
     "bool": { 
      "should": [ 
      { 
       "term": { 
       "name": "John" 
       } 
      }, 
      { 
       "term": { 
       "name": "Bas" 
       } 
      }, 
      { 
       "term": { 
       "name": "Peter" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Wenn ein boolean-Filter, die meiste Zeit ist es besser, die bool Filter als and oder or zu verwenden. Der Grund wird auf dem Elasticsearch Blog erklärt: http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/

+0

Danke, so [Ausdrücke] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html) ist was ich brauchte. Ich habe die Abfrage in meinem Fall eingegeben – Diolor

Verwandte Themen