如何查询空字段或特定值
How to query for empty field or specific value
我正在尝试编写查询以实现以下结果:
field1: value1 AND
field2: value2 OR "" (empty)
我试过以下方法,但总是 returns 结果是空的:
{
"_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 是相同的
我正在尝试编写查询以实现以下结果:
field1: value1 AND
field2: value2 OR "" (empty)
我试过以下方法,但总是 returns 结果是空的:
{
"_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 是相同的