ES报错Text fields are not optimised for operations that require per-d....

    项目要展示一个报表,从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的生命周期之内都将一致保持在堆中,所以谨慎使用

你可能感兴趣的:(ES)