在数据操作中有三个考虑指标:大数据、精确性和实时性。三者难以同时满足。

精确 + 实时

  数据可以存入单台机器的内存之中,我们可以随心所欲,使用任何想用的算法。结果会 100% 精确,响应会相对快速。

大数据 + 精确

  传统的 Hadoop。可以处理 PB 级的数据并且为我们提供精确的答案,但它可能需要几周的时间才能为我们提供这个答案。

大数据 + 实时

  近似算法为我们提供准确但不精确的结果。

Elasticsearch 目前支持两种近似算法( cardinality 和 percentiles )。 它们会提供准确但不是 100% 精确的结果。

cardinality度量

提供字段的unique值数量。对应sql

SELECT COUNT(DISTINCT color)
FROM cars

dsl语句

GET /cars/transactions/_search
{
"size" : ,
"aggs" : {
"distinct_colors" : {
"cardinality" : {
"field" : "color"
}
}
}
}

精度可以通过precision_threshold调节

GET /cars/transactions/_search
{
"size" : ,
"aggs" : {
"distinct_colors" : {
"cardinality" : {
"field" : "color",
"precision_threshold" :
}
}
}
}

示例会确保当字段唯一值在 100 以内时会得到非常准确的结果。尽管算法是无法保证这点的,但如果基数在阈值以下,几乎总是 100% 正确的。高于阈值的基数会开始节省内存而牺牲准确度,同时也会对度量结果带入误差。

precision_threshold 接受 0–40,000 之间的数字,更大的值还是会被当作 40,000 来处理。

如果想在搜索时加速,可以在索引时提前对字段哈希。

percentiles 百分位数度量(看得不太懂,具体是数值怎么算出来的没看懂)

百分位数展现某以具体百分比下观察到的数值。对发现异常很有用。

GET /website/logs/_search
{
"size" : ,
"aggs" : {
"load_times" : {
"percentiles" : {
"field" : "latency"
}
},
"avg_load_time" : {
"avg" : {
"field" : "latency"
}
}
}
}

更复杂的例子

GET /website/logs/_search
{
"size" : ,
"aggs" : {
"zones" : {
"terms" : {
"field" : "zone"
},
"aggs" : {
"load_times" : {
"percentiles" : {
"field" : "latency",
"percents" : [, 95.0, 99.0]
}
},
"load_avg" : {
"avg" : {
"field" : "latency"
}
}
}
}
}
}

查看某个数值属于哪个百分比:percentile_ranks

GET /website/logs/_search
{
"size" : ,
"aggs" : {
"zones" : {
"terms" : {
"field" : "zone"
},
"aggs" : {
"load_times" : {
"percentile_ranks" : {
"field" : "latency",
"values" : [, ]
}
}
}
}
}
}

significant_terms 统计在背景流中显著异常的指标。有个很厉害的例子,关于电影推荐的。

【ES】学习12-近似聚合的更多相关文章

  1. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  2. OpenGL ES学习笔记(三)——纹理

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...

  3. ThinkPhp学习12

    原文:ThinkPhp学习12 二.输出模板内容      (重点) a.display 1.display中没有参数    $this->display(); 2.可以带参数    $this ...

  4. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  5. ES学习笔记

    ES学习 1. 安装 1.1 ES 安装配置 curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5. ...

  6. ES之五:ElasticSearch聚合

    前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...

  7. ElasticSearch 2 (35) - 信息聚合系列之近似聚合

    ElasticSearch 2 (35) - 信息聚合系列之近似聚合 摘要 如果所有的数据都在一台机器上,那么生活会容易许多,CS201 课商教的经典算法就足够应付这些问题.但如果所有的数据都在一台机 ...

  8. (转)Maven学习总结(五)——聚合与继承

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(五)——聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <mod ...

  9. Asp.NetCore源码学习[1-2]:配置[Option]

    Asp.NetCore源码学习[1-2]:配置[Option] 在上一篇文章中,我们知道了可以通过IConfiguration访问到注入的ConfigurationRoot,但是这样只能通过索引器IC ...

  10. OpenGL ES 学习笔记 - Overview - 小旋的博客

    移动端图形标准中,目前 OpenGL ES 仍然是比较通用的标准(Vulkan 则是新一代),这里新开一个系列用于记录学习 OpenGL ES 的历程,以便查阅理解. OverView OpenGL ...

随机推荐

  1. 安装confluence5.10.0版本

    1.confluence也是atlassian公司的一应用 2.安装步骤和jira类似 3.破解jar 将/export/atlassian/confluence/confluence/WEB-INF ...

  2. mongodb 案例 ~ 经典故障案例

    一 简介:此文汇总遇到过和搜集过的故障案例 二 场景案例 1 问题描述: mongo集群在无任何业务情况下,mongos所在服务器cpu突然被打满,内核日志报错 mongos被hung住,非常奇怪的问 ...

  3. linux 文件处理命令

  4. scrapy基础 之 爬虫入门:先用urllib2来跑几个爬虫

    1,爬取糗事百科 概况:糗事百科是html网页,支持直接抓取html字符然后用正则过滤 爬取糗事百科需要同时发送代理信息,即user-agent import urllib2,re def pacho ...

  5. 微信小程序学习过程

    1.诞生背景: 更好的体验: 规范与管理: 2.什么是小程序: 小程序是一种不需要下载即可使用的应用,它实现了应用“触手可及”的梦想: 用户扫一扫或者搜一下即可打开应用,也体现了“用完即走”的理念: ...

  6. xadmin后台页面定制和添加服务器监控组件

    xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...

  7. 2017-2018-2 20165325 实验四《Android程序设计》实验报告

    一.Android程序设计-1 1.检查点要求 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android ...

  8. MinGW GCC 6.3.0 2017年3月份出炉啦

    MSYS_MinGW-w64_GCC_630_x86-x64_Full 发布日期: 2017-03-07 08:48 68264 KB 下载地址: http://xhmikosr.1f0.de/too ...

  9. HTML5 播放器

    之前一个前端群里 大牛 做了一个自适应的HMLT5播放器 最近根据其思路做了一个相对单一移动端的demo,demo用的图片和歌曲json的数据设计 都是群里大牛做的,在这谢谢~: 同时借鉴的几篇文章: ...

  10. ansible配合shell脚本批量编译安装python3.6.6

    [root@node1:/etc]# tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg ├── hosts ├── python.yml └── rol ...