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
的更多详细信息
我是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
的更多详细信息