使用Query DSL查询字符串是否包含在字段中的查询

11

我正在尝试使用Kibana筛选包含字符串“pH”的字段。该字段名为extra.monitor_value_name。可能的值示例包括Temperature_ABC01DO_ABC01或者pH_ABC01

Kibana的Elasticsearch查询DSL似乎没有“包含字符串”的操作,因此我需要自定义查询语句。

我对查询DSL很陌生,你能帮我创建查询吗?

还有,叫它Query DSL合适吗?我甚至不确定术语是否正确。


请添加索引和示例文档的映射。 - Nishant
2个回答

11

好的!回答一下自己的问题。

我最初的问题源于不知道field_namefield_name.keyword的区别。在这里阅读关键字的信息:Kibana中“field”和“field.keyword”字段之间的区别是什么?

解决方案1

以下是我最终使用的查询。我使用了一个regexp查询。我发现这篇文章有助于找到regexp的语法:

{
  "query": {
    "regexp": {
      "extra.monitor_value_name.keyword": "pH.*"
    }
  }
}

解决方案2

另一个过滤的方法是在搜索栏中输入:extra.monitor_value_name.keyword:pH*,而不使用Query DSL。 有一个有趣的事情需要注意,使用这种方法似乎不需要.keyword。我不确定为什么。


1
如何实现不包含“pH.*”? - Murtaza Haji
1
@MurtazaHaji。试试这个:{ "query": { "bool":{ "must_not": [{ "regexp": { "extra.monitor_value_name.keyword": "pH.*" }}]}}}。确保你按照所示获取方括号。 - undefined

7

尝试在Elasticsearch查询DSL中使用过滤器:

{
  "query": {
    "wildcard": {
      "extra.monitor_value_name": {
        "value": "pH.*"
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接