我正在尝试在弹性搜索中进行查询,该搜索将执行以下操作: 我希望它检查一个结果(metropolitan_area为16 AND starts_at为05072013)或(metropolitan_id为16 AND starts_at为“blank”。
这是我当前的查询,但我觉得它需要以某种方式嵌套,我不确定该怎么做。
{
"query" : {
"bool" : {
"must" : [
{
"term" : {"user" : "a"}
},
{
"term" :{"metropolitan_area" : "16"}
}
],
"must_not" : [],
"should" : []
}
},
"filter" : {
"or" : {
"filters" : [
{
"term" : {"user":"519"}
},
{
"term" : {"user":"6"}
},
{
"term" : {"user":"5"}
},
{
"term" : {"user":"36"}
},
{
"term" : {"starts_at":"05072013"}
},
{
"term" : {"starts_at":"blank"}
}
]
}
}
}
答案 0 :(得分:13)
正确嵌套的布尔表达式如下所示:
{
"filter": {
"or" : [{
"and" : [
{ "term" : { "metropolian_area" : 16 } },
{ "term" : { "starts_at" : 0123213 } }
]
}, {
"and" : [
{ "term" : ... },
{ "term" : ... }
]
}]
}
}
答案 1 :(得分:5)
and
,or
和not
个查询。 Elasticsearch文档建议使用bool
query。例如,您可以在过滤器上下文中编写嵌套的bool查询:
{
"query":{
"bool":{
"must":[
{
"term":{
"user":"a"
}
},
{
"term":{
"metropolitan_area":"16"
}
}
],
"filter":{
"bool":{
"should":[
{
"term":{
"user":"519"
}
},
{
"term":{
"user":"6"
}
},
{
"term":{
"user":"5"
}
},
{
"term":{
"user":"36"
}
},
{
"term":{
"starts_at":"05072013"
}
},
{
"term":{
"starts_at":"blank"
}
}
]
}
}
}
}
}