我有一个列表,数组或您熟悉的任何语言.例如名称:["John","Bas","Peter"]
我想查询该name
字段是否与其中一个名称相匹配.
一种方法是使用OR Filter.例如
{ "filtered" : { "query" : { "match_all": {} }, "filter" : { "or" : [ { "term" : { "name" : "John" } }, { "term" : { "name" : "Bas" } }, { "term" : { "name" : "Peter" } } ] } } }
任何更高级的方式?如果它是一个查询而不是过滤器,那就更好了.
{ "query": { "filtered" : { "filter" : { "terms": { "name": ["John","Bas","Peter"] } } } } }
哪个Elasticsearch重写,好像你使用了这个
{ "query": { "filtered" : { "filter" : { "bool": { "should": [ { "term": { "name": "John" } }, { "term": { "name": "Bas" } }, { "term": { "name": "Peter" } } ] } } } } }
使用布尔过滤器时,大多数情况下,使用bool
过滤器比使用and
或更好or
.原因在Elasticsearch博客上解释:http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/