Elasticsearch7.x聚合查询发生异常Text fields are not optimised

springData elasticsearch执行查询操作,报错

Text fields are not optimised for operations that require per-document field data like aggregations and sorting, 

去kibana验证,先执行如下分组查询:(taskbean为索引名, SY_CREATETIME为字段)

GET taskbean/_search
{
	"aggs":{//聚合操作
		"price_group":{//名称,随意起名
			"terms":{//分组
				"field":"SY_CREATETIME"//分组字段
			}
		}
	}
}

确认是报错,,,,

#将需要聚合的字段fielddata设置为true,好像只要text类型的字段,才能执行"fielddata": true,keyword就不行,
在kibana执行

PUT taskbean/_mapping
{
  "properties" : {
    "SY_CREATETIME" : {
      "type":"text",
      "fielddata": true
    }
  }
}

keyword类型 默认不分词的数据类型,常常被用来过滤、排序和聚合。
text类型 在存储数据的时候会默认进行分词,不能用来过滤、排序和聚合等操作。
使用聚合查询时不能使用分词,因此字段需要设置为type = FieldType.Keyword
属性分析:

"properties": {        --里面是字段属性
	"BGSJ_CPBH" : {    --字段
        "type" : "text", --字段类型,该类型可以用于全文本搜索,但不能聚合查询
        "fields" : {  --如果想用一个字段聚合查询,就加fields{}"abc" : {   --BGSJ_CPBH.abc是BGSJ_CPBH字段的keyword版本,用来聚合查询
              "type" : "keyword",
              "ignore_above" : 256
            }
        }
	}
	//或者这样就可以直接聚合查询
	"BGSJ_CPMC" : {    --字段
        "type" : "keyword", --字段类型,该类型常常被用来过滤、排序和聚合。
	}
}

比如:

"terms": {
        "field": "BGSJ_CPBH.abc" 
  }
  //或者
"terms": {
        "field": "BGSJ_CPMC" 
  }

具体你的字段是什么类型,需要你去设置,我相信大部分人的es数据都是用logstash从mysql同步过来的,安装logstash及自定义模板见我的另一篇文章 logstash自定义模板-设置字段类型

@Field(type=FieldType.Text, analyzer="ik_max_word")  表示该字段是一个文本,并作最大程度拆分,默认建立索引
 
@Field(type=FieldType.Text,index=false)     表示该字段是一个文本,不建立索引
 
@Field(type=FieldType.Date)                表示该字段是一个文本,日期类型,默认不建立索引
 
@Field(type=FieldType.Long)               表示该字段是一个长整型,默认建立索引
 
@Field(type=FieldType.Keyword)       表示该字段内容是一个文本并作为一个整体不可分,默认建立索引
 
@Field(type=FieldType.Float)         表示该字段内容是一个浮点类型并作为一个整体不可分,默认建立索引

date 、floatlong都是不能够被拆分的
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值