--- title: "不支持字段类型的非BKD字段参数 – 如何解决此Elasticsearch异常" date: 2026-03-27 lastmod: 2026-03-27 description: "当您尝试为Elasticsearch中仅支持BKD参数的字段类型使用非BKD(Block K-D tree)参数时,会出现此错误。这通常发生在数值或地理位置点字段上。" tags: ["字段映射", "BKD索引", "异常处理", "字段类型"] summary: " 版本: 7.11-8.9 简而言之,当您尝试为Elasticsearch中仅支持BKD参数的字段类型使用非BKD(Block K-D tree)参数时,会出现此错误。这在数值或地理位置点字段中很常见。要解决此问题,您应该确保为字段类型使用了正确的参数。如果您使用的是数值或地理位置点字段,请确保使用BKD参数。或者,您可能需要将字段类型更改为支持您尝试使用的参数的类型。 日志上下文 日志 “Non-BKD field parameters are not supported for [{}] field type” 的类名是 LegacyGeoShapeFieldMapper.java. 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入背景的人参考: public Builder(String name; IndexVersion version; boolean ignoreMalformedByDefault; boolean coerceByDefault) { super(name); if (ShapesAvailability.JTS_AVAILABLE == false || ShapesAvailability.SPATIAL4J_AVAILABLE == false) { throw new ElasticsearchParseException("Non-BKD field parameters are not supported for [{}] field type"; CONTENT_TYPE); } this.indexCreatedVersion = version; this.ignoreMalformed = ignoreMalformedParam(m -> builder(m).ignoreMalformed.get(); ignoreMalformedByDefault); this.coerce = coerceParam(m -> builder(m).coerce.get(); coerceByDefault); " --- > **版本:** 7.11-8.9 简而言之,当您尝试为Elasticsearch中仅支持BKD参数的字段类型使用非BKD(Block K-D tree)参数时,会出现此错误。这在数值或地理位置点字段中很常见。要解决此问题,您应该确保为字段类型使用了正确的参数。如果您使用的是数值或地理位置点字段,请确保使用BKD参数。或者,您可能需要将字段类型更改为支持您尝试使用的参数的类型。 日志上下文 日志 "Non-BKD field parameters are not supported for [{}] field type" 的类名是 [LegacyGeoShapeFieldMapper.java.](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些寻求深入背景的人参考: ```java public Builder(String name; IndexVersion version; boolean ignoreMalformedByDefault; boolean coerceByDefault) { super(name); if (ShapesAvailability.JTS_AVAILABLE == false || ShapesAvailability.SPATIAL4J_AVAILABLE == false) { throw new ElasticsearchParseException("Non-BKD field parameters are not supported for [{}] field type"; CONTENT_TYPE); } this.indexCreatedVersion = version; this.ignoreMalformed = ignoreMalformedParam(m -> builder(m).ignoreMalformed.get(); ignoreMalformedByDefault); this.coerce = coerceParam(m -> builder(m).coerce.get(); coerceByDefault); ```