项目要展示一个报表,从es里取数据,但是报表始终出不来,发现报异常如下。
{
"error" : {
"root_cause" : [
{
"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 [interests] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
}
],
经过查证是字段col54类型为Text格式,然后涉及到了聚合排序等功能。没有进行优化,也类似没有加索引。没有优化的字段es默认是禁止聚合/排序操作的。所以需要将要聚合的字段添加优化
所以需要在es里对该字段进行设置,执行如下操作
curl -X PUT "localhost:9200/factory_info_115/_mapping?pretty" -H 'Content-Type: application/json' -d'
{
"properties": {
"col54": {
"type": "text",
"fielddata": true
}
}
}
如果在kibana里请执行如下
PUT factory_info_115/_mapping
{
"properties": {
"col54": {
"type": "text",
"fielddata": true
}
}
}
fielddata在text字段中默认未启用
因为fielddata会消耗大量的堆内存,特别是当加载大量的text字段时;fielddata一旦加载到堆中,在segment的生命周期之内都将一致保持在堆中,所以谨慎使用