【Mark】elasticsearch 聚合结果被分词处理方案

最近群里很多问关于es的聚合结果被分词的问题,这里统一解答。

es聚合被分词的现象一般是6.x版本的(以前的版本没用过)

es6.x后对于text类型字段需要聚合查询(类似group by)对数据进行统计分析,需要设置fielddata为true 和fields字段才能进行聚合操作。

例:text类型字段进行聚合查询(count(*) group by)  摘自:https://www.cnblogs.com/dxf813/p/8447467.html 

需求:对机构字段既可以进行模糊查询,又可以按照字段全名进行聚合统计

实现:

-设置字段参数

复制代码
 "institution": {
              "type": "text",
              "analyzer": "ik_max_word",
              "search_analyzer": "ik_max_word",
              "fielddata" : true,
              "fields": {"raw": {"type": "keyword"}}#如果不设置keyword索引在聚合时将会使用已分解后的词。例如:想用“国泰君安”聚合,结果使用“国泰”,“君安”聚合
}              
复制代码

-查询时aggs参数

复制代码
    body = {
            "query": {
                "range": {
                        "time": {
                                "gte": '2018-02-01'
                                }
                        }
                    },
            "aggs": {
                "institution_count": {
                    "terms": {"field": "institution.raw"},#使用keyword分组
                    "aggs": {
                            }
                        }
                    }
            }

你可能感兴趣的:(ElasticSearch,java调用)