Kri*_*nya 8 regex kibana elastic-stack
我是ELK的新手.我想根据字段中单词出现的顺序搜索文档.例如,
在doc1中,my_field:"MY FOO WORD BAR EXAMPLE"
在doc2中,my_field:"MY BAR WORD FOO EXAMPLE"
我想在Kibana中查询文档,其中"FOO"后跟"BAR"而不是相反.所以,我希望doc1在这种情况下返回而不是doc2.我尝试在Kibana搜索中使用以下查询.但是,它不起作用.此查询甚至不会产生任何搜索结果.
my_field.raw:/.*FOO.*BAR.*/
Run Code Online (Sandbox Code Playgroud)
我也尝试过分析字段(只是my_field),虽然我知道这应该不起作用.当然,这也没有产生任何结果.
请帮我这个正则表达式搜索.为什么我没有得到该查询的任何匹配结果?
GET /_search
{
"query": {
"regexp": {
"user": {
"value": "k.*y",
"flags" : "ALL",
"max_determinized_states": 10000,
"rewrite": "constant_score"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
更多详细信息请参见此处
我不确定为什么该正则表达式查询不起作用,但我相信 Kibana 正在使用此处记录的 Elasticsearch 查询字符串查询,因此例如您可以通过将搜索放在双引号中来执行短语查询(在链接中记录)并它会查找单词“foo”,后跟“bar”。这也会表现得更好,因为您可以在分析字段 (my_field) 上执行此操作,其中它已标记每个单词以执行快速查找。因此,您在 Kibana 中的搜索将是:
my_field: "FOO 酒吧"
更新:
看起来这是 Kibana 的一个恼人的怪癖(可能是出于向后兼容性的原因)。无论如何,这与您不匹配,因为您正在搜索未分析的字段,并且显然 Kibana 默认情况下将搜索小写,因此它不会匹配未分析的大写“FOO”。您可以在此处提到的 Kibana 高级设置中进行配置,具体方法是将配置选项“lowercase_expanded_terms”设置为 false。