如何在ElasticSearch中的URL上执行RegExp查询?

时间:2018-07-16 13:25:13

标签: regex elasticsearch kibana

我正在尝试在ElasticSearch中执行(我认为是)简单的RegExp查询,但是对我来说,我无法使其正常工作。这就是查询,

{
  "query": {
    "regexp":{
      "request_url": "/somepage/[0-9]+/[a-z]+"
    }
  }
}

该查询似乎中断的地方是当我包含正斜杠/字符时。没有正斜杠,我可以获得每个单独部分的结果。

我仅尝试使用斜杠/,尝试使用\/\\/进行转义。我将查询减少为/somepage\\/somepage,什么都没有。

我一直在对此进行大量搜索,但似乎找不到一致的答案。我认为也许ElasticSearch在RegExp查询中不支持/ ...?通过查看文档,我知道它不是保留字符。

这与该字段的数据类型有关吗?

"request_url": {
  "type": "text",
  "norms": false,
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
},

text在查看文档时明确表示它分析并标记了数据。因此,我希望它可能会丢弃/个字符?我也尝试对keyword字段进行查询,但该查询不起作用。

那么,有什么建议吗? ElasticSearch可以实际满足我的需求吗?谢谢。

1 个答案:

答案 0 :(得分:0)

我的建议:

  1. \\\\/如果将其视为字符串,它将在JSON中变为\\/,同时也将变为\/
  2. \x2f及其衍生物=> \\x2f\\\\x2f