Regex Kibana正则表达式搜索

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.*/

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

在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.*/
我还尝试了分析字段(只是
我的\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"
            }
        }
    }
}