Kibana中的正则表达式问题

时间:2019-01-24 17:40:33

标签: regex elasticsearch kibana

我在Kibana / Elasticsearch 6.5.4版中使用正则表达式模式时遇到了麻烦。我要搜索的字段具有以下映射:

"field": {
          "type": "text",
          "analyzer": "custom_analyzer"
        },

在直接向elasticsearch请求时,此字段中的正则表达式搜索会返回多个匹配:

GET /my_index/_search
{
    "query": {
        "regexp":{
            "field": "abc[0-9]{4}"
        }
    }
}

另一方面,在Kibana的发现/仪表板页面中,以下所有查询均返回空:

原始查询-field:/abc[0-9]{4}/

转义查询-field:/abc\[0\-9\]\{4\}/

绝望查询-field:/.*/

检查kibana对elasticsearch的请求会显示以下查询:

  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "field:/abc[0-9]{4}/",
            "analyze_wildcard": true,
            "default_field": "*"
          }
        }

我希望kibana能够理解双斜杠语法/my_query/,并进行“ regexp query”而不是“ query_string”。我已经尝试过使用两种查询语言:“ lucene”,“ kuery”和启用/禁用“实验性查询功能”的可选功能。

进一步挖掘,我发现this old issue表示弹性仅将正则表达式运行到now deprecated _all field中。如果仍然如此,我不确定正则表达式在kibana / elastic 6.X中如何工作。

我想念什么?

该主题中的所有其他堆栈问题都已过时,或者与语法问题有关,并且/或者缺乏对分析器如何处理空格的理解,没有提供任何帮助。

2 个答案:

答案 0 :(得分:1)

因此,我对如何使Lucene与Kibana中的Regexp搜索配合使用并没有确切的答案。但是我想出了一种在Kibana中做到这一点的方法。

解决方案是对自定义DSL使用过滤器

enter image description here

以下是在查询JSON中添加内容的示例-

{
    "regexp": {
        "req.url.keyword": "/question/[0-9]+/answer"
    }
}

我的数据中包含示例网址-/questions/432142/answer

此外,您可以使用Kibana搜索(Lucene语法)编写更多过滤器

它会进行适当的搜索,没有转义问题或任何此类事情。

希望有帮助。

答案 1 :(得分:0)

确保Kibana的右上角没有打开查询功能。

top right of Kibana 6.8.1