Kibana 正则表达式搜索

Kibana Regular expression search

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

在 doc1 中,my_field:"MY FOO WORD BAR EXAMPLE"
在 doc2 中,my_field:"MY BAR WORD FOO EXAMPLE"

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

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

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

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

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

my_field: "FOO BAR"

更新:

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

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

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

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

my_field: FOO AND my_field: BAR

如果您的 "my_field" 数据看起来像 "MYFOOWORDBAREXAMPLE",无法标记化,您应该使用查询字符串:

my_field: *FOO*BAR*
GET /_search
{
    "query": {
        "regexp": {
            "user": {
                "value": "k.*y",
                "flags" : "ALL",
                "max_determinized_states": 10000,
                "rewrite": "constant_score"
            }
        }
    }
}

有关 here

的更多详细信息