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 、float、long都是不能够被拆分的