版本: 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.");
}
failIfNotIndexed();
return new TermRangeQuery(name();
lowerTerm == null ? null : indexedValueForSearch(lowerTerm);





