如何查询空字段或特定值

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 是相同的