我有一个列表,数组或您熟悉的任何语言。例如。名称:["John","Bas","Peter"]
,我想查询name
字段,如果它与其中一个名称匹配。
一种方法是使用OR Filter。 e.g。
{
"filtered" : {
"query" : {
"match_all": {}
},
"filter" : {
"or" : [
{
"term" : { "name" : "John" }
},
{
"term" : { "name" : "Bas" }
},
{
"term" : { "name" : "Peter" }
}
]
}
}
}
任何更高级的方式?如果它是一个查询而不是一个过滤器,那就更好了。
答案 0 :(得分:15)
{
"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/
答案 1 :(得分:0)
当我尝试使用filtered
查询no [query] registered for [filtered]
时,基于answer here,似乎过滤的查询在ES 5.0中已被弃用并删除。所以我提供使用:
{
"query": {
"bool": {
"filter": {
"terms": {
"name": ["John","Bas","Peter"]
}
}
}
}
}