Elasticsearch 7.13.2 버전 기준, painless에서 HTML 태그를 제거하려고 replaceAll
을 사용했는데 다음과 같이 에러가 나면서 지원을 하지 않는다.
Unhandled Exception class_cast_exception
Cannot cast java.lang.String to java.util.function.Function
Stack:
[
"java.base/java.lang.Class.cast(Class.java:3818)",
"ctx.content.replaceAll(\"<[^>]+>\", \"\");\n\n\n",
" ^---- HERE"
]
replace는 지원을 하는데 정규식을 작성할 수 없으니 직접 loop하며 지워야 한다.
painless 코드를 테스트할 수 있는 Dev Tool의 Painless Lab에서 진행한다.
def ctx = params.ctx;
String openTag = "<";
String closeTag = ">";
String content = ctx.content;
while (content.contains(openTag) && content.contains(closeTag)) {
int start = content.indexOf(openTag);
int end = content.indexOf(closeTag, start) + 1;
if (end > start) {
content = content.substring(0, start) + content.substring(end);
} else {
break;
}
}
ctx.put('content', content);
return ctx;