如何在Elasticsearch DevTools中移除文档值子串并解决正则报错
解决Elasticsearch正则范围错误问题
问题原因
你的正则表达式中[a-zA-Z0-9_-]部分存在语法错误:-_被Elasticsearch解析为字符范围(从下划线_到减号-),但下划线的ASCII码(95)大于减号的ASCII码(45),导致无效范围报错。
修正方案
调整字符集中减号-的位置,或对其转义,避免被解析为范围符号:
方案1:将-移到字符集开头/结尾
修改后的正则表达式:
(D:/([-a-zA-Z0-9_]+)/_work/([-a-zA-Z0-9_]+)/s/)
把-放在字符集最前面,Elasticsearch会将其视为普通字符,而非范围分隔符。
方案2:转义-
在字符集中对-添加反斜杠转义:
(D:/([a-zA-Z0-9_\-]+)/_work/([a-zA-Z0-9_\-]+)/s/)
Elasticsearch中使用示例
假设你要处理的字段名为file_path,可以用_update_by_query批量替换:
POST /your_index_name/_update_by_query { "script": { "source": """ ctx._source.file_path = ctx._source.file_path.replaceAll(/(D:\/([-a-zA-Z0-9_]+)\/_work\/([-a-zA-Z0-9_]+)\/s\/)/, ''); """, "lang": "painless" }, "query": { "exists": { "field": "file_path" } } }
注意:Painless脚本中,正则的
/需要转义为\/,或者使用其他分隔符(如#)包裹正则。
内容的提问来源于stack exchange,提问作者PakachuTunderwipe
相关产品推荐
相关产品推荐

