(九)elasticsearch之分组去重(collapse)

您所在的位置:网站首页 es的分页 (九)elasticsearch之分组去重(collapse)

(九)elasticsearch之分组去重(collapse)

2023-09-23 14:53| 来源: 网络整理| 查看: 265

一、背景介绍

问题一:如何对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": 10 }, "aggs": { "title_top": { "top_hits": { "_source": { "includes": [ "name" ] }, "sort": [ { "name": { "order": "desc" } } ], "size": 1 } } } } }, "size": 0 }

方式二:使用 collapse 折叠

GET user/_search { "query": { "match_all":{} }, "collapse": { "field": "name" } }

总结:collapse 折叠比聚合更加简洁,性能也更加优异。

四、collapse(折叠)介绍

1、Field Collapsing(字段折叠)不能与scroll、rescore以及search after 结合使用。

2、使用collapse 的字段如果是 string类型,则es 中对应 keyword。(The field used for collapsing must be a single valued keyword or numeric field with doc_values activated)

3、查看collapse 结果

(1)GET user/_search { "query": { "match": { "address": "Place" } }, "collapse" : { "field" : "age" }, "sort": ["age"], "from": 10 } (2)Expand collapse results(对于每个折叠的结果,可以通过inner_hits展开结果) // 单个inner_hits GET user/_search { "query": { "match": { "address": "Place" } }, "collapse" : { "field" : "age", "inner_hits": { "name": "test", "size": 5, "sort": [{ "age": "asc" }] }, "max_concurrent_group_searches": 4 }, "sort": ["age"] } // 多个inner_hits GET user/_search { "query": { "match": { "address": "Place" } }, "collapse" : { "field" : "age", "inner_hits":[ { "name": "age", "size": 2, "sort": [{ "age": "asc" }] }, { "name":"account_number", "size": 2, "sort": [{ "account_number": "asc" }] }], "max_concurrent_group_searches": 4 }, "sort": ["age"] } // max_concurrent_group_searches:允许每组检索inner_hits的并发请求数 (默认按照线程池的大小或者数据节点数)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3