版本: 8-8
简而言之,当在Elasticsearch中使用非字符串值进行路由时会出现此错误。Elasticsearch要求路由值必须是字符串类型,使用其他数据类型将导致此错误。要解决此问题,请确保路由值是字符串。如果值是数字,可以在用于路由之前将其转换为字符串。如果值是复杂对象,可以考虑使用对象的唯一标识符或特定属性作为路由值。
日志上下文 #
日志"Routing values must be strings but found [{}]“的类名是 IndexRouting.java。 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入背景的人参考:
if (source.currentToken() == Token.VALUE_STRING) {
int hash = Murmur3HashFunction.hash(source.text());
source.nextToken();
return hash;
}
throw new ParsingException(source.getTokenLocation(); "Routing values must be strings but found [{}]"; source.currentToken());
} @Override
public int updateShard(String id; @Nullable String routing) {
throw new IllegalArgumentException(error("update"));





