我有一个列表,数组或您熟悉的任何一种语言。例如,names:如果与这些名称之一匹配["John","Bas","Peter"],我想查询该name字段。
["John","Bas","Peter"]
name
一种方法是使用OR过滤器。例如
{ "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/
bool
and
or