我有三个字段status
,type
和search
。我想要搜索的数据包含status
等于NEW
或status
等于IN PROGRESS
且type
等于abc
或type
等于xyz
,search
包含(部分匹配)。
我的电话如下所示 -
{
"query": {
"bool" : {
"must" : [{
"match": {
"status": {
"query": "abc",
}
}
}, {
"match": {
"type": {
"query": "NEW",
}
}
},{
"query_string": {
"query": "*abc*", /* for partial search */
"fields": ["title", "name"]
}
}]
}
}
}
答案 0 :(得分:1)
嵌套你的boolqueries。我想你缺少的是:
"bool": { "should": [
{ "match": { "status": "abc" } },
{ "match": { "status": "xyz" } }
]}
这是一个必须匹配其中一个should子句的查询,因为只应给出子句。
编辑解释差异:
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"status": "abc"
}
},
{
"match": {
"status": "xyz"
}
}
]
}
},
{
"terms": {
"type": [
"NEW",
"IN_PROGRESS"
]
}
},
{
"query_string": {
"query": "*abc*",
"fields": [
"title",
"name"
]
}
}
]
}
}
}
所以你在顶部有一个boolquery。 3个内部查询中的每一个都必须为真。