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聚合
"query": {
"match_all": {}
},
"aggs": {
"type": {
"terms": {
"field": "title.keyword",
"size": 10
"title_top": {
"top_hits": {
"_source": {
"includes": ["title"]
"sort": [
"title.keyword": {
"order": "desc"
],
"size":1
"size": 0
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
方式二:折疊
"match_all":{}
"collapse": {
"field": "title.keyword"
方式二較方式一:
1)簡化;
2)性能比aggs的實作要好很多。
更多DSL詳見:
http://t.cn/RmafXMJ5、注意事項&小結
1、折疊功能ES5.3版本之後才釋出的。
2、聚合&折疊隻能針對keyword類型有效;
3、隻要思想不滑坡,方案總比問題多!
參考:
https://elasticsearch.cn/article/132