我正在测试用于nginx访问日志的ELK堆栈。它看起来不错,除了我没有找到一种方法来搜索Kibana Discovery(v5.3.2)中的记录,其路径以"/test/a"
开头。如果我删除斜杠,搜索会有效,但在这种情况下,我会得到我不需要的内容 - "/ololo/ololo?test=1"
我尝试了不同的请求:
path:/\/test\/a/
path:/\\/test\\/a/
path:"/test/a"
path:"\/test\/a"
path:"\\/test\\/a"
但没有任何效果如我所料。
记录:
[
{
...
"path": "/test/a1"
...
},
{
...
"path": "/test/a2"
...
},
{
...
"path": "/ololo/ololo?test=1"
...
},
]
映射:
"path": {
"type": "string",
"index": "analyzed",
},
有没有办法使用斜杠作为模式的一部分进行搜索?
更新
这些模式也不起作用:
path:/.*\/test\/a.*/
path:/[\/]test[\/]a/
答案 0 :(得分:6)
您需要更改path
字段的映射以便不进行分析,否则不会将斜杠编入索引。
映射应如下所示:
"path": {
"type": "string",
"index": "not_analyzed", <--- change this
},
请注意,您需要删除索引并使用正确的映射重新创建索引才能使其生效。
之后,您将能够使用以下查询path:"/test/a"
答案 1 :(得分:1)
使用此查询作为示例:
{
"query": {
"query_string": {
"fields": [
"path.keyword"
],
"query": "\\/test\\/a\\/*",
"analyzer": "keyword",
"analyze_wildcard": true
}
}
}