问题现象
在执行 Elasticsearch 聚合查询时,如果针对 text 类型的字段进行 Terms 聚合,经常会遇到如下错误:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [region] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
],
"status": 400
}
}
例如执行以下语句:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": {
"field": "interests"
}
}
}
}
原因分析
从 Elasticsearch 5.x 版本开始,为了节省内存,默认情况下 text 类型字段是不开启 Fielddata 的。聚合操作(如 Terms Aggregation)需要读取字段的倒排索引并加载到内存中进行计算,这会导致较大的内存开销。因此,系统默认禁用了该功能以防止 OOM(Out Of Memory)。
注意错误信息中的 实际上是指你当前正在聚合的那个字段名(示例中为 ),而非固定的 。

