📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 7.13-8.9

简而言之,当Elasticsearch遇到无效的Unicode字符或代理代码时,会出现此错误。代理代码在Unicode中用于表示无法直接表示的字符。这种情况可能在索引包含此类字符的文档时发生。要解决此问题,可以对输入数据进行清理,删除或替换这些无效字符。另外,可以使用try-catch块来处理错误,在索引过程中跳过有问题的文档。最后,可以配置Elasticsearch在索引过程中忽略畸形字符。

日志上下文 #

日志"Invalid unicode character code; [{}] is a surrogate code"的类名是 AbstractBuilder.java。 我们从Elasticsearch源代码中提取了以下内容,供寻求深入背景的人员参考:

private static String hexToUnicode(Source source; String hex) {
 try {
 int code = Integer.parseInt(hex; 16);
 // U+D800至U+DFFF只能用作代理对,因此不是有效的字符代码
 if (code >= 0xD800 && code <= 0xDFFF) {
 throw new ParsingException(source; "Invalid unicode character code; [{}] is a surrogate code"; hex);
 }
 return String.valueOf(Character.toChars(code));
 } catch (IllegalArgumentException e) {
 throw new ParsingException(source; "Invalid unicode character code [{}]"; hex);
 }