我正在尝试编写查询以实现以下结果:
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" }
}
]
}
}
]
}
}
}
我相信我正在做一个与自己矛盾的查询。
最佳答案
这看起来非常复杂。
尝试使用queryStringQuery
尝试像这样重写查询
{
"_source": ["field1", "field2"],
"query": {
"query_string": {
"query": "field1:value1 AND (field2:value2 OR (!field2:*))"
}
}
}
如果您仍然想以这种格式使用
您已经使用must_not子句,根据您的用例,这将在某种意义上如下所示。
栏位1:值1与
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将会是相同的
关于elasticsearch - 如何查询空字段或特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763099/