如何在Kibana Discovery中使用斜杠(' /')?

时间:2017-07-07 23:53:58

标签: elasticsearch kibana

我正在测试用于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/

2 个答案:

答案 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
    }
  }
}