2、需求
1)对ES的检索结果进行去重统计计数。
2)对ES的检索结果去重后显示
3、分析
1)统计计数需要借助ES聚合功能结合cardinality实现。
2)去重显示结果有两种方式:
方式一:使用字段聚合+top_hots聚合方式。
方式二:使用collapse折叠功能。
4、DSL源码
1)统计去重数目。
GET books/_search
{
"size":0,
"aggs" : {
"books_count" : {
"cardinality" : {
"field" : "title.keyword"
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
2)返回去重内容
方式一:top_hits聚合
GET books/_search
{
"query": {
"match_all": {}
},
"aggs": {
"type": {
"terms": {
"field": "title.keyword",
"size": 10
},
"aggs": {
"title_top": {
"top_hits": {
"_source": {
"includes": ["title"]
},
"sort": [
{
"title.keyword": {
"order": "desc"
}
}
],
"size":1
}
}
}
}
},
"size": 0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
方式二:折叠
GET books/_search
{
"query": {
"match_all":{}
},
"collapse": {
"field": "title.keyword"
}
}
1
2
3
4
5
6
7
8
9
方式二较方式一:
1)简化;
2)性能比aggs的实现要好很多。
更多DSL详见:http://t.cn/RmafXMJ
5、注意事项&小结
1、折叠功能ES5.3版本之后才发布的。
2、聚合&折叠只能针对keyword类型有效;
3、只要思想不滑坡,方案总比问题多!
参考: