Kibana 正则表达式搜索

Posted

技术标签:

【中文标题】Kibana 正则表达式搜索【英文标题】:Kibana Regular expression search 【发布时间】:2017-03-26 22:24:02 【问题描述】:

我是 ELK 的新手。我想根据字段中单词的出现顺序搜索文档。例如,

在 doc1 中,my_field:“我的 FOO 单词 BAR 示例” 在 doc2 中,my_field:“我的 BAR 单词 FOO 示例”

我想在 Kibana 中查询“FOO”后跟“BAR”而不是相反的文档。所以,我希望 doc1 在这种情况下返回,而不是 doc2。 我尝试在 Kibana 搜索中使用以下查询。但是,它不起作用。此查询甚至不会产生任何搜索结果。

my_field.raw:/.*FOO.*BAR.*/

我也尝试过分析字段(只是my_field),尽管我知道这不应该工作。当然,这也没有产生任何结果。

请帮助我进行这个正则表达式搜索。为什么我没有得到该查询的任何匹配结果?

【问题讨论】:

【参考方案1】:

我不确定为什么该正则表达式查询不起作用,但我相信 Kibana 正在使用 Elasticsearch 的查询字符串查询记录在 here 所以例如,您可以通过将您的在双引号中搜索,它会查找单词“foo”,后跟“bar”。这也会表现得更好,因为您可以在分析的字段 (my_field) 上执行此操作,它已标记每个单词以执行快速查找。所以你在 Kibana 中搜索会是:

my_field: "FOO BAR"

更新:

看起来这是 Kibana 的一个恼人的怪癖(可能是出于向后兼容的原因)。无论如何,这不适合您,因为您正在搜索未分析的字段,显然 Kibana 默认情况下是小写搜索,因此它不会匹配未分析的大写“FOO”。您可以在提到 here 的 Kibana 高级设置中进行配置,特别是将配置选项“lowercase_expanded_terms”设置为 false。

【讨论】:

感谢您的回复。不仅如此。即使“FOO”和“BAR”被其他单词分隔,我也需要所有文档。 示例:匹配 doc1,my_field:“MY FOO WORD BAR 示例”。 不匹配 doc2, my_field: "MY BAR WORD FOO Examples" 所以,我需要正则表达式而不是词组匹配 好的,我知道为什么会发生这种情况(Kibana 的怪癖),更新了答案。 另外,从性能的角度来看,使用具有高 slop 值 + in_order = true 的 span Near 查询(哪个短语匹配)将实现您正则表达式所做的事情,您可以针对分析的字段执行此操作我认为应该表现更好(因为每个令牌都有其顺序,所以理论上它会查找两个令牌然后确保 indexOf(bar) > indexOf(foo),类似的答案在这里 - ***.com/a/26637081/1135228跨度> 【参考方案2】:

Kibana 的标准查询语言基于 Lucene query syntax。

默认分析器会将文本标记为不同的单词:[MY, FOO, WORD, BAR, EXAMPLE]

您可以在 Kibana 中尝试以下搜索字符串,而不是使用正则表达式匹配:

my_field: FOO AND my_field: BAR

如果你的“my_field”数据看起来像“MYFOOWORDBAREXAMPLE”,不能被标记,你应该使用查询字符串:

my_field: *FOO*BAR*

【讨论】:

【参考方案3】:
GET /_search

    "query": 
        "regexp": 
            "user": 
                "value": "k.*y",
                "flags" : "ALL",
                "max_determinized_states": 10000,
                "rewrite": "constant_score"
            
        
    

更多详情请关注here

【讨论】:

你如何在 GUI Web 控制台中做到这一点? @RodneyS.Foley 左上角你应该看到Add a Filer + 在弹出窗口中点击编辑查询DSL

以上是关于Kibana 正则表达式搜索的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

使用正则表达式进行搜索

JavaScript 正则表达式

正则表达式(RegExp)

javascript 正则表达式

正则表达式——html