ElasticSearch/Lucene查询字符串 - 选择"字段X存在"

Mis*_*iev 1 lucene elasticsearch kibana

如何通过Kibana查询ElasticSearch以选择具有字段X的项目?

例如,我有一个带字段的映射{"a": {"type": "string"}, "b": {"type": "string"}}和两个文档

{"a": "lalala"}
{"a": "enoheo", "b": "nthtnhnt"}
Run Code Online (Sandbox Code Playgroud)

我想在不知道它b实际是什么的情况下找到第二个文档.

Jam*_*mes 6

自从给出这些答案以来已经有一段时间了。如果有人需要更新的答案,文档现在给出了选择具有特定字段的结果的示例。

在查询字符串语法中:

其中该字段title具有任何非空值:

_exists_:title
Run Code Online (Sandbox Code Playgroud)

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_field_names


Slo*_*ens 5

使用exists过滤器,如:

POST /test_index/_search
{
    "filter": {
        "exists": {
           "field": "b"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您需要Lucene查询字符串查询,这应该这样做:

POST /test_index/_search
{
   "query": {
      "query_string": {
         "query": "b:*"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来测试它的一些代码:

http://sense.qbox.io/gist/ad336a0888a279bfdace03e217bf1915adbf0fe2

  • 我希望它与带有 Lucene 查询字符串的 Kibana 一起使用,而不是查询 DSL。 (2认同)
  • 负例呢?您将如何使用 lucene 查询字符串来测试字段不存在? (2认同)