使用 Query DSL 查询某个字段是否包含字符串

Int*_*rer 12 elasticsearch elasticsearch-dsl elastic-stack

我正在尝试过滤 Kibana 以查找包含字符串“pH”的字段。该字段称为extra.monitor_value_name. 潜在值的示例有Temperature_ABC01DO_ABC01、 或pH_ABC01

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

我是 Query DSL 的新手,您能帮我创建查询吗?

另外,将其称为 Query DSL 是否合适?我什至不确定措辞是否正确。

Int*_*rer 12

好的!回过头来回答我自己的问题。

我最初的问题源于不了解field_namevs field_name.keyword。有关关键字的信息,请阅读此处:What's the Difference Between the 'field' and 'field.keyword' fields in Kibana?

解决方案1

这是我最终使用的查询。我使用了正则表达式查询。我发现这篇文章对于弄清楚正则表达式的语法很有用:

{
  "query": {
    "regexp": {
      "extra.monitor_value_name.keyword": "pH.*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

解决方案2

我可以在没有 Query DSL 的情况下进行过滤的另一种方法是在搜索字段中输入:extra.monitor_value_name.keyword:pH*。值得注意的一件有趣的事情是,.keyword这种方法似乎没有必要。我不知道为什么。


小智 8

使用 Elasticsearch Query DSL 在过滤器中尝试以下操作:

{
  "query": {
    "wildcard": {
      "extra.monitor_value_name": {
        "value": "pH.*"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)