【问题标题】:Query to see if a field contains a string using Query DSL使用 Query DSL 查询字段是否包含字符串
【发布时间】:2019-08-04 08:57:18
【问题描述】:

我正在尝试为包含字符串“pH”的字段过滤 Kibana。该字段称为extra.monitor_value_name。潜在值的示例为 Temperature_ABC01DO_ABC01pH_ABC01

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

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

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

【问题讨论】:

  • 请添加索引和示例文档的映射。

标签: elasticsearch elastic-stack elasticsearch-dsl


【解决方案1】:

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

我最初的问题源于不知道field_namefield_name.keyword。在此处阅读有关关键字的信息:What's the difference between the 'field' and 'field.keyword' fields in Kibana?

解决方案 1

这是我最终使用的查询。我使用了正则表达式查询。我发现this article 有助于找出正则表达式的语法:

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

解决方案 2

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

【讨论】:

  • 不包含"pH.*"怎么办?
【解决方案2】:

在使用 Elasticsearch Query DSL 的过滤器中试试这个:

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

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2011-05-14
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2013-05-18
    相关资源
    最近更新 更多