--- title: "文本或关键字字段无法执行范围查询时 – 如何解决此 Elasticsearch 异常" date: 2026-02-20 lastmod: 2026-02-20 description: "当在文本或关键字字段上尝试范围查询而 'fielddata' 被禁用时,会发生此错误。本文介绍如何解决此 Elasticsearch 异常。" tags: ["范围查询", "字段映射", "fielddata", "查询异常"] summary: "版本: 7.7-7.15 简要地说,当在文本或关键字字段上尝试范围查询而 ‘fielddata’ 被禁用时,会发生此错误。Fielddata 通常被禁用,因为它会消耗大量堆空间。要解决此问题,您可以在特定字段上启用 ‘fielddata’,但要注意潜在的内存影响。或者,您可以将字段类型更改为开箱即支持排序或脚本的类型,例如 ‘integer’ 或 ‘date’。另一种解决方案是使用 ‘doc_values’ 字段,它是一种基于磁盘的数据结构,不消耗堆空间。 日志上下文 日志 “[range] queries on [text] or [keyword] fields cannot be executed when ‘” 类名是 StringFieldType.java。 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: @Override public Query rangeQuery(Object lowerTerm; Object upperTerm; boolean includeLower; boolean includeUpper; SearchExecutionContext context) { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[range] queries on [text] or [keyword] fields cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES.getKey() + "' is set to false." --- > **版本:** 7.7-7.15 简要地说,当在文本或关键字字段上尝试范围查询而 'fielddata' 被禁用时,会发生此错误。Fielddata 通常被禁用,因为它会消耗大量堆空间。要解决此问题,您可以在特定字段上启用 'fielddata',但要注意潜在的内存影响。或者,您可以将字段类型更改为开箱即支持排序或脚本的类型,例如 'integer' 或 'date'。另一种解决方案是使用 'doc_values' 字段,它是一种基于磁盘的数据结构,不消耗堆空间。 日志上下文 ----------- 日志 "[range] queries on [text] or [keyword] fields cannot be executed when '" 类名是 [StringFieldType.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java @Override public Query rangeQuery(Object lowerTerm; Object upperTerm; boolean includeLower; boolean includeUpper; SearchExecutionContext context) { if (context.allowExpensiveQueries() == false) { throw new ElasticsearchException("[range] queries on [text] or [keyword] fields cannot be executed when '" + ALLOW_EXPENSIVE_QUERIES.getKey() + "' is set to false."); } failIfNotIndexed(); return new TermRangeQuery(name(); lowerTerm == null ? null : indexedValueForSearch(lowerTerm); ```