OpenSearch 2.6.x聚合查询报错求助(开启fielddata仍无效)
问题重现
升级至OpenSearch 2.6.x后,执行聚合查询时触发以下错误:
2023-03-20T14:53:32.878-04:00 ERROR [PivotAggregationSearch]
Aggregation search query returned an error: OpenSearch
exception [type=illegal_argument_exception, reason=Text fields are not
optimised for operations that require per-document field data like
aggregations and sorting, so these operations are disabled by default.
Please use a keyword field instead. Alternatively, set fielddata=true
on [message] in order to load field data by uninverting the inverted
index. Note that this can use significant memory.]
已尝试为message字段设置fielddata: true,但问题未解决。
可能的解决方案
1. 确认索引映射修改是否生效
- 执行以下命令检查目标索引的映射,确认
message字段的fielddata是否已设为true:
GET /your_index_name/_mapping
- 如果修改未生效,大概率是因为索引已存在且有数据,直接修改映射无法覆盖已有字段的设置。此时需要重新创建索引并导入数据,或使用
_reindexAPI将数据迁移到新索引。
2. 使用keyword子字段进行聚合
如果message字段原本有默认生成的keyword子字段(Elasticsearch/OpenSearch通常会为text字段自动生成),直接在聚合查询中替换为message.keyword:
{ "aggs": { "message_agg": { "terms": { "field": "message.keyword" } } } }
若没有默认的keyword子字段,需修改映射添加该字段(同样需要重建索引或重新导入数据):
{ "properties": { "message": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } }
3. 验证查询的目标索引
确保聚合查询指向的是你修改过映射的索引,避免误查询到未更新映射的旧索引或别名。
4. 重启OpenSearch节点(可选)
若修改映射后仍未生效,尝试重启OpenSearch节点,确保配置加载生效。
内容的提问来源于stack exchange,提问作者MickGraylog

