Elasticsearch Pipeline路径匹配问题:如何匹配指定前缀的路径?
Elasticsearch Pipeline 匹配指定前缀路径的条件设置
在Elasticsearch Pipeline的条件判断中,直接用==加*做通配符匹配是无效的——因为*会被当作普通字符处理,而非通配符。要匹配所有以path/to/my/url/开头的路径,有两种可靠的方法:
方法一:使用字符串startsWith方法
利用字符串原生的startsWith方法,直接检查路径是否以目标前缀开头,写法简洁且性能较好:
"condition": "ctx.url?.path != null && ctx.url.path.startsWith('path/to/my/url/')"
- 加上
ctx.url?.path != null是为了避免url字段或path子字段不存在时触发空指针错误。
方法二:使用正则表达式匹配
通过=~操作符结合正则表达式实现前缀匹配,适合需要更复杂匹配规则的场景:
"condition": "ctx.url?.path != null && ctx.url.path =~ /^path\\/to\\/my\\/url\\/.*/"
- 正则中的
^表示匹配字符串开头,.*表示匹配任意长度的任意字符; - 注意在JSON中需要对正则里的反斜杠做转义,所以写成
\\/。
为什么之前的尝试无效?
ctx.url.path == 'path/to/my/url/'是精确匹配,只会匹配完全等于该字符串的路径,自然无法包含后面的可变部分;ctx.url.path == 'path/to/my/url/*'会把*当作路径的一部分去匹配,而不是通配符,所以也无法匹配到带可变部分的路径。
内容的提问来源于stack exchange,提问作者Nicolò Frongia
相关产品推荐
相关产品推荐

