Kibana 中的正则表达式问题

Fra*_*ues 4 regex elasticsearch kibana

我很难在 Kibana/Elasticsearch 6.5.4 版中使用正则表达式模式。我正在搜索的字段具有以下映射:

"field": {
          "type": "text",
          "analyzer": "custom_analyzer"
        },
Run Code Online (Sandbox Code Playgroud)

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

GET /my_index/_search
{
    "query": {
        "regexp":{
            "field": "abc[0-9]{4}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另一方面,在 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": "*"
          }
        }
Run Code Online (Sandbox Code Playgroud)

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

进一步挖掘我发现了这个旧问题,它说 elastic 只将正则表达式运行到现在已弃用的 _all 字段中。如果这仍然成立,我不确定正则表达式在 kibana/elastic 6.X 中是如何工作的。

我错过了什么?任何帮助澄清在 Kibana 中使用正则表达式的条件将不胜感激

本主题中的所有其他堆栈问题要么是陈旧的,要么与语法问题和/或缺乏对分析器如何处理空格的理解有关,并且没有为我提供任何帮助。

Ash*_*wal 5

所以我不完全知道如何让 Lucene 与 Kibana 中的 Regexp 搜索一起工作。但我想出了一种在 Kibana 中做到这一点的方法。

解决方案是使用带有自定义 DSL 的过滤器

在此处输入图片说明

这是在查询 JSON 中放入内容的示例 -

{
    "regexp": {
        "req.url.keyword": "/question/[0-9]+/answer"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

希望能帮助到你。