--- title: "无法在禁用索引和文档值的字段上定义脚本 - 如何解决此 Elasticsearch 异常" date: 2026-03-13 lastmod: 2026-03-13 description: "当尝试在未索引且未启用 doc_values 的字段上定义脚本时会出现此错误。本文介绍如何通过设置 index: true 或 doc_values: true 来解决此问题。" tags: ["Elasticsearch异常", "脚本定义", "字段映射", "索引配置", "文档值", "映射解析异常"] summary: "版本: 7.13-8.9 简要来说,当您尝试在一个未索引且未启用 doc_values 的字段上定义脚本时,会出现此错误。Elasticsearch 要求字段必须被索引或启用 doc_values 才能执行排序、聚合或脚本等操作。要解决此问题,您可以设置 “index: true” 使字段可搜索,或设置 “doc_values: true” 启用面向列的磁盘存储,这对排序和聚合很有用。请注意,更改这些设置需要重新索引数据。 日志上下文 # 日志 “Cannot define script on field with index:false and doc_values:false” 的类名是 FieldMapper.java。 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: ParameterindexParam; ParameterdocValuesParam ) { 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." --- > **版本:** 7.13-8.9 简要来说,当您尝试在一个未索引且未启用 doc_values 的字段上定义脚本时,会出现此错误。Elasticsearch 要求字段必须被索引或启用 doc_values 才能执行排序、聚合或脚本等操作。要解决此问题,您可以设置 "index: true" 使字段可搜索,或设置 "doc_values: true" 启用面向列的磁盘存储,这对排序和聚合很有用。请注意,更改这些设置需要重新索引数据。 日志上下文 ----------- 日志 "Cannot define script on field with index:false and doc\_values:false" 的类名是 [FieldMapper.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java ParameterindexParam; ParameterdocValuesParam ) { 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()) { ```