--- title: "路由值必须是字符串但发现了其他类型 - 如何解决此Elasticsearch异常" date: 2026-02-10 lastmod: 2026-02-10 description: "在Elasticsearch中使用非字符串值作为路由时出现的错误解决方案" tags: ["路由配置", "数据类型转换", "索引异常"] summary: " 版本: 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")); " --- > **版本:** 8-8 简而言之,当在Elasticsearch中使用非字符串值进行路由时会出现此错误。Elasticsearch要求路由值必须是字符串类型,使用其他数据类型将导致此错误。要解决此问题,请确保路由值是字符串。如果值是数字,可以在用于路由之前将其转换为字符串。如果值是复杂对象,可以考虑使用对象的唯一标识符或特定属性作为路由值。 日志上下文 ----------- 日志"Routing values must be strings but found [{}]"的类名是[IndexRouting.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入背景的人参考: ```java 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")); ```