速度优化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相关推荐

  1. terraform 腾讯云_使用Terraform优化云成本的权威指南

    terraform 腾讯云 The Problem - An Engineers New Role Cloud "Financial Controller" 问题-工程师的新角色云 ...

  2. php 数组去重_数组去重(JavaScript 为例)

    数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...

  3. java数组去重_数组去重12种方案-你要的全在这

    首先我们先温习一下数组的常用的方法 pop push shift unshift slice splice sort reverse concat join indexOf lastIndexOf m ...

  4. spring elasticsearch 按条件删除_实战:项目数据源转为Elasticsearch

    原本项目是基于MYSQL的,现因需求将其转换为MYSQL+Elasticsearch,MYSQL的ORM使用的是Spring Data Jpa,Mybatis的转换与其类似,有人看再更 先看原项目 原 ...

  5. elasticsearch删除索引_一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)

    在 Elasticsearch 中,索引是一个非常重要的概念,它是具有相同结构的文档集合.类比关系型数据库,比如 Mysql, 你可以把它对标看成和库同级别的概念. 今天小哈将带着大家了解, 在 El ...

  6. es scroll 时间_游标查询 Scroll | Elasticsearch: 权威指南 | Elastic

    游标查询 Scrolledit scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价. 游标查询允许我们 先做查询初始化,然后再批量地拉 ...

  7. elasticsearch的简介_以及实现原理---全文检索引擎ElasticSearch工作笔记001

    可以去百度查一下 上面的elastic的官网. 我们要知道mysql 是专攻于crud的操作,而在海量数据中进行快速的查询他就不太合适了, 在海量数据中进行检索和存储,需要用elasticsearch ...

  8. php多关键词精确查找,查找多个精确值 | Elasticsearch: 权威指南 | Elastic

    查找多个精确值edit term 查询对于查找单个值非常有用,但通常我们可能想搜索多个值. 如果我们想要查找价格字段值为 $20 或 $30 的文档该如何处理呢? 不需要使用多个 term 查询,我们 ...

  9. elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

    这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality 基础统计 stats 百分位 percentiles 字符串统计 string_stats 1.去重统计 cardinalit ...

最新文章

  1. linux下helloworld的简单编译过程
  2. 《IT项目管理》读书笔记(9) —— 项目沟通管理
  3. Spring Boot 启动加载数据 CommandLineRunner
  4. Server 2008 配置共享文件服务器--权限配置
  5. Directx11教程(18) D3D11管线(7)
  6. c语言字符密码验证码,c语言下的学生管理系统(含密码加密和验证码).docx
  7. windows下使用cpanm进行模块安装
  8. micrometer_具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
  9. unity中脚本编辑器UnIDE
  10. WebSocket,不再“轮询”
  11. Linux常用工具包安装
  12. native2ascii命令详解
  13. C语言习题5.21--学生成绩的处理
  14. slic codec
  15. jmeter 加密解密_Android 数据加密软件简单评测(上)
  16. 怎么修改u盘的图标 如何修改移动硬盘图标
  17. C++ 常用的八种排序方法
  18. 仅需三步学会使用低代码ThingJS与森数据DIX数据对接
  19. 1.无线通信:传播和衰落
  20. 贵阳哪里有计算机二级培训机构,贵阳省计算机二级考试培训

热门文章

  1. 小程序加载本地图片解决方案
  2. 大话互联网行业发展史
  3. gtx1060 能用catia软件吗_为何垃圾独显作设计比核显强?
  4. Unity Recorder录制视频使用
  5. 经典SQL语句大全(Mssql语句)(Acc语句) 完美兼容科讯cms!
  6. python写一个自动登录脚本_python实现自动登录
  7. 利用X64Dbg解决jlink.exe提示The connected J-Link is defective. Proper opera..._
  8. Android录音工具类
  9. 引用 教你 如何映像劫持杀毒软件
  10. python super