Kibana中正则表达式的问题

问题描述 投票:2回答:1

我很难在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}/

scaped查询 - 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中工作。

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

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

regex elasticsearch kibana
1个回答
1
投票

所以我对如何使Lucene在Kibana中使用Regexp搜索完全没有答案。但我想出了一个在Kibana做到这一点的方法。

解决方案是使用Filter与自定义DSL

enter image description here

这是一个放在Query JSON中的例子 -

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

我在我的数据中使用的示例Url - /questions/432142/answer

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

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

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.