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

版本: 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"));