我尝试编写查询以获得以下结果:
field1: value1 AND
field2: value2 OR "" (empty)
我已尝试过以下操作,但它总是会返回空结果:
{
"_source": ["field1", "field2"],
"query": {
"bool": {
"must": [
{"match": { "field1": "value1" }},
{
"bool": {
"should": [
{
"match": {
"field2": "value2"
}
}
],
"must_not": [
{
"exists": { "field": "field2" }
}
]
}
}
]
}
}
}
我相信我的查询与自己相矛盾。
答案 0 :(得分:2)
这看起来非常复杂。
尝试使用queryStringQuery 尝试像这样重写您的查询
{
"_source": ["field1", "field2"],
"query": {
"query_string": {
"query": "field1:value1 AND (field2:value2 OR (!field2:*))"
}
}
}
如果您仍想使用此格式
您已经使用了must_not子句,根据您的使用情况,这意味着如下所示。
field1:value1 AND
field2:value2 AND NOT“”(空)
你应该做的是
{
"_source": [
"field1",
"field2"
],
"query": {
"bool": {
"must": [
{
"match": {
"field1": "value1"
}
},
{
"bool": {
"should": [
{
"match": {
"field2": "value2"
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "field2"
}
}
]
}
}
]
}
}
]
}
}
}
但如果您想先在查询中分析查询中的术语,那么使用queryString会更容易。
所以在这种情况下使用queryString OR bool会是相同的