我在Kibana / Elasticsearch 6.5.4版中使用正则表达式模式时遇到了麻烦。我要搜索的字段具有以下映射:
"field": {
"type": "text",
"analyzer": "custom_analyzer"
},
在直接向elasticsearch请求时,此字段中的正则表达式搜索会返回多个匹配:
GET /my_index/_search
{
"query": {
"regexp":{
"field": "abc[0-9]{4}"
}
}
}
另一方面,在Kibana的发现/仪表板页面中,以下所有查询均返回空:
原始查询-field:/abc[0-9]{4}/
转义查询-field:/abc\[0\-9\]\{4\}/
绝望查询-field:/.*/
检查kibana对elasticsearch的请求会显示以下查询:
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "field:/abc[0-9]{4}/",
"analyze_wildcard": true,
"default_field": "*"
}
}
我希望kibana能够理解双斜杠语法/my_query/
,并进行“ regexp query”而不是“ query_string”。我已经尝试过使用两种查询语言:“ lucene”,“ kuery”和启用/禁用“实验性查询功能”的可选功能。
进一步挖掘,我发现this old issue表示弹性仅将正则表达式运行到now deprecated _all field中。如果仍然如此,我不确定正则表达式在kibana / elastic 6.X中如何工作。
我想念什么?
该主题中的所有其他堆栈问题都已过时,或者与语法问题有关,并且/或者缺乏对分析器如何处理空格的理解,没有提供任何帮助。
答案 0 :(得分:1)
因此,我对如何使Lucene与Kibana中的Regexp搜索配合使用并没有确切的答案。但是我想出了一种在Kibana中做到这一点的方法。
解决方案是对自定义DSL使用过滤器
以下是在查询JSON中添加内容的示例-
{
"regexp": {
"req.url.keyword": "/question/[0-9]+/answer"
}
}
我的数据中包含示例网址-/questions/432142/answer
此外,您可以使用Kibana搜索(Lucene语法)编写更多过滤器
它会进行适当的搜索,没有转义问题或任何此类事情。
希望有帮助。
答案 1 :(得分:0)
确保Kibana的右上角没有打开查询功能。