最近公司做电商项目,需要用到搜索引擎,选择的elasticsearch做站内搜索,其中聚合统计商品分类的时候遇到聚合结果被分词的现象特定记录一下:
es聚合被分词的现象一般是6.x版本的(以前的版本没用过)
es6.x后对于text类型字段需要聚合查询(类似group by)对数据进行统计分析,需要设置fielddata为true 和fields字段才能进行聚合操作。并且将fields的type设置为keywords
字段索引结构
"categoryName": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"fielddata" : true,
"fields": {"raw": {"type": "keyword"}}#如果不设置keyword索引在聚合时将会使用已分解后的词
}
查询时候请求参数
body = {
"query": {
"range": {
"time": {
"gte": '2018-02-01'
}
}
},
"aggs": {
"institution_count": {
"terms": {"field": "categoryName.raw"},#使用keyword分组
"aggs": {
}
}
}
}