一、背景介绍
问题一:如何对elasticsearch的检索结果进行去重统计计数。类似mysql 的 select count(*) from a group by b。
问题二:如何对elasticsearch的检索结果去重后显示。类似mysql 的select distint(“name”) from a group by b。
二、分析
问题一:
统计计数需要借助elasticsearch聚合功能结合cardinality实现。
问题二:
方式一:使用字段聚合+top_hots聚合方式。
方式二:使用collapse折叠功能。
三、DSL 实例
问题一:
// 统计去重数目
GET user/_search
{
"size":0,
"aggs" : {
"name_count" : {
"cardinality" : {
"field" : "name"
}
}
}
}
问题二:
方式一:top_hits 聚合
GET user/_search
{
"query": {
"match_all": {
}
},
"aggs": {
"type": {
"terms": {
"field": "name",
"size"