--- title: "无法在脚本字段上定义多字段 - 如何解决此 Elasticsearch 异常" date: 2026-02-06 lastmod: 2026-02-06 description: "当尝试在Elasticsearch的脚本字段上定义多字段时出现的异常原因及解决方法" tags: ["Elasticsearch", "异常处理", "字段映射", "脚本字段", "多字段"] summary: "版本: 7.13-8.9 简而言之,当您尝试在Elasticsearch的脚本字段(scripted field)上定义多字段(multifields)时,就会出现这个错误。脚本字段是在查询时计算得出的,不支持多字段功能,而多字段通常用于以不同方式索引同一个字段。要解决这个问题,您可以从脚本字段中删除多字段定义,或者为多字段定义创建一个单独的非脚本字段。另外,您也可以修改您的脚本,使其输出不需要多字段的格式。 日志上下文 # 日志"Cannot define multifields on a field with a script"的类名是 FieldMapper.java。 我们从Elasticsearch源代码中提取了以下内容,供那些希望深入了解上下文的人参考: scriptParam.addValidator(s -> { if (s != null && indexParam.get() == false && docValuesParam.get() == false) { throw new MapperParsingException("Cannot define script on field with index:false and doc_values:false"); } if (s != null && multiFieldsBuilder.hasMultiFields()) { throw new MapperParsingException("Cannot define multifields on a field with a script"); } if (s != null && copyTo." --- > **版本:** 7.13-8.9 简而言之,当您尝试在Elasticsearch的脚本字段(scripted field)上定义多字段(multifields)时,就会出现这个错误。脚本字段是在查询时计算得出的,不支持多字段功能,而多字段通常用于以不同方式索引同一个字段。要解决这个问题,您可以从脚本字段中删除多字段定义,或者为多字段定义创建一个单独的非脚本字段。另外,您也可以修改您的脚本,使其输出不需要多字段的格式。 日志上下文 ----------- 日志"Cannot define multifields on a field with a script"的类名是[FieldMapper.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从Elasticsearch源代码中提取了以下内容,供那些希望深入了解上下文的人参考: ```java scriptParam.addValidator(s -> { if (s != null && indexParam.get() == false && docValuesParam.get() == false) { throw new MapperParsingException("Cannot define script on field with index:false and doc_values:false"); } if (s != null && multiFieldsBuilder.hasMultiFields()) { throw new MapperParsingException("Cannot define multifields on a field with a script"); } if (s != null && copyTo.hasValues()) { throw new MapperParsingException("Cannot define copy_to parameter on a field with a script"); } }); ```