1、前言

Elasticsearch有没有类似mysql的distinct的去重功能呢?

1)如何去重计数? 
类似mysql: select distinct(count(1)) from my_table; 
2)如何获取去重结果。 
类似mysql:SELECT DISTINCT name,age FROM users;

2、需求

1)对ES的检索结果进行去重统计计数。 
2)对ES的检索结果去重后显示

3、分析

1)统计计数需要借助ES聚合功能结合cardinality实现。 
2)去重显示结果有两种方式: 
方式一:使用字段聚合+top_hots聚合方式。 
方式二:使用collapse折叠功能。

4、DSL源码

1)统计去重数目。

GET books/_search
{
"size":,
"aggs" : {
"books_count" : {
"cardinality" : {
"field" : "title.keyword"
}
}
}
}

2)返回去重内容

方式一:top_hits聚合

GET books/_search
{
"query": {
"match_all": {}
},
"aggs": {
"type": {
"terms": {
"field": "title.keyword",
"size":
},
"aggs": {
"title_top": {
"top_hits": {
"_source": {
"includes": ["title"]
},
"sort": [
{
"title.keyword": {
"order": "desc"
}
}
],
"size":
}
}
}
}
},
"size":
}

方式二:折叠

GET books/_search
{
"query": {
"match_all":{}
},
"collapse": {
"field": "title.keyword"
}
}

方式二较方式一: 
1)简化; 
2)性能比aggs的实现要好很多。 
更多DSL详见:http://t.cn/RmafXMJ

5、注意事项&小结

1、折叠功能ES5.3版本之后才发布的。 
2、聚合&折叠只能针对keyword类型有效;

在Elasticsearch6.X中如何实现去重的更多相关文章

  1. JS中数组对象去重

    JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉 ...

  2. 【转】larbin中的url去重算法

    1.bloom filter算法 传说中,larbin使用bloom filter算法来进行url去重.那我们就先来了解下bloom filter算法好了. [以下转自:http://hi.baidu ...

  3. 总结Javascript中数组各种去重的方法

    相信大家都知道网上关于Javascript中数组去重的方法很多,这篇文章给大家总结Javascript中数组各种去重的方法,相信本文对大家学习和使用Javascript具有一定的参考借鉴价值,有需要的 ...

  4. 转:python中对list去重的多种方法

    对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ...

  5. 对List中对象的去重

    今天项目中遇到了一个对List中对象去重的问题. 首先对于我们自己系统中的对象我们只要重写该对象的 equal 和 hashcode 即可(利用对象中的能够唯一确定对象的属性). 但是我遇到的不是本系 ...

  6. C#中有关字符串去重的解决方案

    今天在群里看到一个同学的面试题 题目中有一个这样的要求 //本地有个文档文件a.txt里面包含的内容分为一段字符串"abacbacde"请编写一个程序,获取文件得到对应的内容,并对 ...

  7. list集合中指定字段去重

    在开发中,有时会需要指定字段去重,以下为实现方法: 假设有个房地产权的类,其中宗地代码ZDDM值重复,而我们在前端页面显示时,只需要一条数据,因为公共字段都一样: IEqualityComparer需 ...

  8. Javascript中的数组去重-indexof方法

    在Javascript中,有时我们会用到数组去重.我在这里给大家介绍一下本人认为最简单实用的一种方法-indexOf()去重. var arr = [1,1,1,2,2,2,3,3,4,5,6,2,1 ...

  9. 从给数组中的对象去重看Javascript中的reduce()

    假设有这样一个数组: let person = [ {id: 0, name: "小明"}, {id: 1, name: "小张"}, {id: 2, name ...

随机推荐

  1. python 基础 4.0 函数的一般形式及传参

    #/usr/bin/python #coding=utf-8 #@Time   :2017/10/23 15:58 #@Auther :liuzhenchuan #@File   :函数的一般形式.p ...

  2. Unix环境高级编程—进程关系

    终端登录 网络登录 进程组 getpgrp(void) setpgid(pid_t pid, pid_) 会话: 是一个或多个进程组的集合,通常由shell的管道将几个进程编成一组. setsid(v ...

  3. web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!

    本文转自:http://www.cnblogs.com/babosa/p/7355468.html 需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估 ...

  4. SHA-1算法c语言实现

    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signatu ...

  5. c语言高速推断一个数是偶数还是奇数

    #include <stdio.h> int main() { int a; while(1) { printf("please input the number:\n" ...

  6. Android Development Note-01

    Eclipse快捷键: 导包:ctrl+alt+o 格式化代码:ctrl+alt+f   MVC: M——Model V——View C——Control   android程序界面如何设计.调试 U ...

  7. ZooKeeper原理及使用(转)

    原文地址 ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby ...

  8. SpringBoot学习笔记(13):日志框架

    SpringBoot学习笔记(13):日志框架——SL4J 快速开始 说明 SpringBoot底层选用SLF4J和LogBack日志框架. SLF4J的使用 SpringBoot的底层依赖关系 1. ...

  9. dojo 官方翻译 dojo/_base/lang 版本1.10

    官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang 应用加载声明: require ...

  10. iPad actionsjeet

    在iphone和ipad上使用UIActionShee控件t的效果会不一样,在苹果的官方文档中有相关说明: 在ipad上使用UIActionSheet控件改控件不再从底部弹出,而是从屏幕中间弹出与UI ...