Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何查询空字段或特定值_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Kibana - Fatal编程技术网 elasticsearch 如何查询空字段或特定值,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 如何查询空字段或特定值,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 如何查询空字段或特定值

elasticsearch 如何查询空字段或特定值,elasticsearch,kibana,elasticsearch,Kibana,我正在尝试编写一个查询以获得以下结果: field1: value1 AND field2: value2 OR "" (empty) 我尝试了以下操作,但它总是返回空结果: { "_source": ["field1", "field2"], "query": { "bool": { "must": [ {"match": { "field1": "value1" }}, { "bool": {

我正在尝试编写一个查询以获得以下结果:

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和

字段2:值2而不是“”(空)

你应该做的是

   {
  "_source": [
    "field1",
    "field2"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "field1": "value1"
          }
        },
        {
          "bool": {
            "should": [
              {
                "match": {
                  "field2": "value2"
                }
              },
              {
                "bool": {
                  "must_not": [
                    {
                      "exists": {
                        "field": "field2"
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}
但是,如果您想先分析查询中的术语(您在查询中已经完成了这项工作),那么使用queryString会更容易


因此,在本例中使用queryString或bool将是相同的,因为它完全匹配,所以我不会使用query\u字符串。匹配或术语应该同样好。但总的来说,这是一个很好的解决方案。@MrSimple谢谢。但在这个问题上,他使用的匹配查询也是全文查询,将进行分析。这就是我提出这个建议的原因。谢谢@MrSimple和Gaurav Arya。事实上,我还不确定该选哪一个,精确匹配还是全文。我两个都试试。试着根据你的用例来思考。全文查询首先分析搜索字符串,然后搜索生成的标记。精确匹配查询按原样搜索搜索字符串。您所做的是一个全文查询。以下是指向它的链接。全文->术语级别->在本例中,不存在查看整个字段是否存在。。不仅仅是字段是空的。我也有同样的问题。。。不幸的是,这个“exists”并没有返回空字符串文档。我认为你犯了一个逻辑错误,你必须和不应该在同一级别上。必须不应该在
应该[{…}下,布尔:{必须不:[…]}]