Regex Kibana正则表达式搜索
我是麋鹿的新手。我想根据字段中单词的出现顺序搜索文档。比如说, 在doc1中,my_字段:“my FOO WORD BAR EXAMPLE”Regex Kibana正则表达式搜索,regex,kibana,elastic-stack,Regex,Kibana,Elastic Stack,我是麋鹿的新手。我想根据字段中单词的出现顺序搜索文档。比如说, 在doc1中,my_字段:“my FOO WORD BAR EXAMPLE”在doc2中,my_字段:“my BAR WORD FOO EXAMPLE” 我想在Kibana中查询“FOO”后面跟“BAR”的文档,而不是相反的文档。所以,我希望doc1在这种情况下返回,而不是doc2。 我尝试在Kibana搜索中使用下面的查询。但是,它不起作用。这个查询甚至不会产生任何搜索结果 my_field.raw:/.*FOO.*BAR.*/
在doc2中,my_字段:“my BAR WORD FOO EXAMPLE” 我想在Kibana中查询“FOO”后面跟“BAR”的文档,而不是相反的文档。所以,我希望doc1在这种情况下返回,而不是doc2。 我尝试在Kibana搜索中使用下面的查询。但是,它不起作用。这个查询甚至不会产生任何搜索结果
my_field.raw:/.*FOO.*BAR.*/
我还尝试了分析字段(只是我的\u字段
),但我知道这不应该起作用。当然,这也没有产生任何结果
请帮我做这个正则表达式搜索。为什么我没有得到该查询的任何匹配结果?我不确定为什么正则表达式查询不起作用,但我相信Kibana正在使用Elasticsearch的查询字符串查询文档,例如,您可以通过将搜索放在双引号中进行短语查询(记录在链接中),它将查找单词“foo”然后是“bar”。这也会表现得更好,因为您可以在分析的字段(my_字段)上执行此操作,在该字段中,它已标记每个单词以执行快速查找。因此,您在Kibana中搜索将是: my_字段:“FOO BAR” 更新:
看起来这是Kibana的一个恼人的怪癖(可能是因为向后兼容的原因)。无论如何,这不适合您,因为您正在搜索一个未分析的字段,显然Kibana在默认情况下将搜索小写,因此它不会匹配未分析的大写字母“FOO”。您可以在前面提到的Kibana高级设置中对此进行配置,具体方法是将配置选项“lowercase_expanded_terms”设置为false。Kibana的标准查询语言基于Lucene 默认分析器将文本标记为不同的单词:[MY,FOO,WORD,BAR,EXAMPLE] 您可以在Kibana中尝试以下搜索字符串,而不是使用正则表达式匹配:
my_field: FOO AND my_field: BAR
如果您的“my_field”数据看起来像“MYFOOWORDBAREXAMPLE”,无法标记,则应使用查询字符串:
my_field: *FOO*BAR*
有关的更多详细信息,感谢您的回复。不仅如此。即使“FOO”和“BAR”之间用其他单词分隔,我也需要所有文档。
示例:匹配doc1,my_字段:“my FOO WORD BAR示例”
Not Match doc2,my_字段:“my BAR WORD FOO EXAMPLE”因此,我需要正则表达式,而不是短语匹配。Kay,我找到了发生这种情况的原因(Kibana的奇怪怪癖),更新了答案。另外,从性能角度来看,使用span near查询(哪个短语匹配)使用高斜率值+in_order=true可以实现正则表达式的功能,并且可以针对分析的字段执行,我认为该字段的性能会更好(因为每个标记都有其顺序,所以理论上它会查找两个标记,然后确保indexOf(bar)>indexOf(foo),这里有类似的答案-如何在GUI web控制台中做到这一点?@RodneyS.Foley左上角您应该在弹出窗口中看到
添加文件管理器+
,单击编辑查询DSL
GET /_search
{
"query": {
"regexp": {
"user": {
"value": "k.*y",
"flags" : "ALL",
"max_determinized_states": 10000,
"rewrite": "constant_score"
}
}
}
}