Elasticsearch 字段聚合产生分词效果的解决办法
最近在使用Elasticsearch(6+)中涉及到了聚合,但是如果字段上有中文会产生分词,解决办法如下:
1)治标又治本
"username": {
"type": "text",
"fields": {
"keyword": { // 解决中文分词
"type": "keyword",
"ignore_above": 256
}
},
"fielddata": true // 聚合使用
}
在使用时的查询结构为:
"aggs": {
"group_by_username": { // 用户可自行定义
"terms": {
"field": "username.keyword"
}
}
}
2)如果该字段的内容没有空格,也可以使用分词器来解决
"username": {
"type": "text",
"analyzer": "whitespace", // 以空格进行分词的分词器
"search_analyzer": "whitespace",
"fielddata": true
}
在使用时的查询结构为:
"aggs": {
"group_by_username": { // 用户可自行定义
"terms": {
"field": "username"
}
}
}
以上两种都可以解决,第一种更完美。
PS:如果内容为英文,默认是按照空格进行分词