赞
踩
转自:
https://blog.csdn.net/OliverCaro/article/details/120763278
一、ElasticSearch的分组聚合
官网文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_multi_field_terms_aggregation
实现背景:实现类似SQL的group by功能:
select team,age from a_person group by team,age;
二、多字段分组聚合的三种实现方法(性能不高)
在ElasticSearch中,实现多字段分组聚合的方式包括:
1、使用 Script
使用脚本script从多个字段聚合分组:
dsl:
- GET /_search
- {
- "query": {
- "match_all": {}
- },
- "aggs": {
- "group_ab": {
- "terms": {
- "script": {
- "source": "doc['a'].value +','+ doc['b'].value",
- "lang": "painless"
- }
- }
- }
- }
- }
- }
2、使用 copy_to 字段(需要提前mapping,暂不考虑)
在创建索引的mapping时创建一个新的专用copy_to字段,后续可以在这个字段上进行汇总查询。
3、multi_terms 聚合
Multi Terms aggregation | Elasticsearch Guide [7.13] | Elastic
multi_terms 聚合将来自多个字段的术语组合成一个复合key。会禁用全局序数,并且比从单个term聚合要慢。
注意7.12版本新特性,旧版本不用考虑
dsl:
- GET /products/_search
- {
- "aggs": {
- "genres_and_products": {
- "multi_terms": {
- "terms": [{
- "field": "genre"
- }, {
- "field": "product"
- }]
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。