elasticsearch 条件去重_统计去重后的数量 | Elasticsearch: 权威指南 | Elastic
速度优化edit
如果想要获得唯一值的数目, 通常 需要查询整个数据集合(或几乎所有数据)。 所有基于所有数据的操作都必须迅速,原因是显然的。
HyperLogLog 的速度已经很快了,它只是简单的对数据做哈希以及一些位操作。
但如果速度对我们至关重要,可以做进一步的优化。
因为 HLL 只需要字段内容的哈希值,我们可以在索引时就预先计算好。 就能在查询时跳过哈希计算然后将哈希值从 fielddata 直接加载出来。
预先计算哈希值只对内容很长或者基数很高的字段有用,计算这些字段的哈希值的消耗在查询时是无法忽略的。
尽管数值字段的哈希计算是非常快速的,存储它们的原始值通常需要同样(或更少)的内存空间。这对低基数的字符串字段同样适用,Elasticsearch 的内部优化能够保证每个唯一值只计算一次哈希。
基本上说,预先计算并不能保证所有的字段都更快,它只对那些具有高基数和/或者内容很长的字符串字段有作用。需要记住的是,预计算只是简单的将查询消耗的时间提前转移到索引时,并非没有任何代价,区别在于你可以选择在 什么时候 做这件事,要么在索引时,要么在查询时。
要想这么做,我们需要为数据增加一个新的多值字段。我们先删除索引,再增加一个包括哈希值字段的映射,然后重新索引:
DELETE /cars/
PUT /cars/
{
"mappings": {
"transactions": {
"properties": {
"color": {
"type": "string",
"fields": {
"hash": {
"type": "murmur3"
}
}
}
}
}
}
}
POST /cars/transactions/_bulk
{ "index": {}}
{ "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
多值字段的类型是 murmur3 ,这是一个哈希函数。
现在当我们执行聚合时,我们使用 color.hash 字段而不是 color 字段:
GET /cars/transactions/_search
{
"size" : 0,
"aggs" : {
"distinct_colors" : {
"cardinality" : {
"field" : "color.hash"
}
}
}
}
注意我们指定的是哈希过的多值字段,而不是原始字段。
现在 cardinality 度量会读取 "color.hash" 里的值(预先计算的哈希值),取代动态计算原始值的哈希。
单个文档节省的时间是非常少的,但是如果你聚合一亿数据,每个字段多花费 10 纳秒的时间,那么在每次查询时都会额外增加 1 秒,如果我们要在非常大量的数据里面使用 cardinality ,我们可以权衡使用预计算的意义,是否需要提前计算 hash,从而在查询时获得更好的性能,做一些性能测试来检验预计算哈希是否适用于你的应用场景。。
elasticsearch 条件去重_统计去重后的数量 | Elasticsearch: 权威指南 | Elastic相关推荐
- terraform 腾讯云_使用Terraform优化云成本的权威指南
terraform 腾讯云 The Problem - An Engineers New Role Cloud "Financial Controller" 问题-工程师的新角色云 ...
- php 数组去重_数组去重(JavaScript 为例)
数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...
- java数组去重_数组去重12种方案-你要的全在这
首先我们先温习一下数组的常用的方法 pop push shift unshift slice splice sort reverse concat join indexOf lastIndexOf m ...
- spring elasticsearch 按条件删除_实战:项目数据源转为Elasticsearch
原本项目是基于MYSQL的,现因需求将其转换为MYSQL+Elasticsearch,MYSQL的ORM使用的是Spring Data Jpa,Mybatis的转换与其类似,有人看再更 先看原项目 原 ...
- elasticsearch删除索引_一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)
在 Elasticsearch 中,索引是一个非常重要的概念,它是具有相同结构的文档集合.类比关系型数据库,比如 Mysql, 你可以把它对标看成和库同级别的概念. 今天小哈将带着大家了解, 在 El ...
- es scroll 时间_游标查询 Scroll | Elasticsearch: 权威指南 | Elastic
游标查询 Scrolledit scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价. 游标查询允许我们 先做查询初始化,然后再批量地拉 ...
- elasticsearch的简介_以及实现原理---全文检索引擎ElasticSearch工作笔记001
可以去百度查一下 上面的elastic的官网. 我们要知道mysql 是专攻于crud的操作,而在海量数据中进行快速的查询他就不太合适了, 在海量数据中进行检索和存储,需要用elasticsearch ...
- php多关键词精确查找,查找多个精确值 | Elasticsearch: 权威指南 | Elastic
查找多个精确值edit term 查询对于查找单个值非常有用,但通常我们可能想搜索多个值. 如果我们想要查找价格字段值为 $20 或 $30 的文档该如何处理呢? 不需要使用多个 term 查询,我们 ...
- elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...
这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality 基础统计 stats 百分位 percentiles 字符串统计 string_stats 1.去重统计 cardinalit ...
最新文章
- linux下helloworld的简单编译过程
- 《IT项目管理》读书笔记(9) —— 项目沟通管理
- Spring Boot 启动加载数据 CommandLineRunner
- Server 2008 配置共享文件服务器--权限配置
- Directx11教程(18) D3D11管线(7)
- c语言字符密码验证码,c语言下的学生管理系统(含密码加密和验证码).docx
- windows下使用cpanm进行模块安装
- micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
- unity中脚本编辑器UnIDE
- WebSocket,不再“轮询”
- Linux常用工具包安装
- native2ascii命令详解
- C语言习题5.21--学生成绩的处理
- slic codec
- jmeter 加密解密_Android 数据加密软件简单评测(上)
- 怎么修改u盘的图标 如何修改移动硬盘图标
- C++ 常用的八种排序方法
- 仅需三步学会使用低代码ThingJS与森数据DIX数据对接
- 1.无线通信:传播和衰落
- 贵阳哪里有计算机二级培训机构,贵阳省计算机二级考试培训
热门文章
- 小程序加载本地图片解决方案
- 大话互联网行业发展史
- gtx1060 能用catia软件吗_为何垃圾独显作设计比核显强?
- Unity Recorder录制视频使用
- 经典SQL语句大全(Mssql语句)(Acc语句) 完美兼容科讯cms!
- python写一个自动登录脚本_python实现自动登录
- 利用X64Dbg解决jlink.exe提示The connected J-Link is defective. Proper opera..._
- Android录音工具类
- 引用 教你 如何映像劫持杀毒软件
- python super