我有一个列表,数组或您熟悉的任何语言.例如名称:["John","Bas","Peter"]
我想查询该name
字段是否与其中一个名称相匹配.
一种方法是使用OR Filter.例如
{
"filtered" : {
"query" : {
"match_all": {}
},
"filter" : {
"or" : [
{
"term" : { "name" : "John" }
},
{
"term" : { "name" : "Bas" }
},
{
"term" : { "name" : "Peter" }
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何更高级的方式?如果它是一个查询而不是过滤器,那就更好了.
小智 18
当我尝试filtered
我得到的查询时no [query] registered for [filtered]
,根据这里的答案,似乎过滤查询已在 ES 5.0 中被弃用并删除。所以我提供使用:
{
"query": {
"bool": {
"filter": {
"terms": {
"name": ["John","Bas","Peter"]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
knu*_*ker 17
{
"query": {
"filtered" : {
"filter" : {
"terms": {
"name": ["John","Bas","Peter"]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个Elasticsearch重写,好像你使用了这个
{
"query": {
"filtered" : {
"filter" : {
"bool": {
"should": [
{
"term": {
"name": "John"
}
},
{
"term": {
"name": "Bas"
}
},
{
"term": {
"name": "Peter"
}
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用布尔过滤器时,大多数情况下,使用bool
过滤器比使用and
或更好or
.原因在Elasticsearch博客上解释:http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/
归档时间: |
|
查看次数: |
12101 次 |
最近记录: |