最近在使用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:如果内容为英文,默认是按照空格进行分词

标签: Elasticsearch中文分词聚合, Elasticsearch

添加新评论