Elasticsearch 聚合系列:adjacency matrix aggregation(邻接矩阵聚合)
adjacency matrix aggregation
邻接矩阵聚合
定义
对某个字段的值做矩阵,返回单独满足一个/同时满足两个的结果
A | B | C | |
---|---|---|---|
A | A | A&B | A&C |
B | B | B&C | |
C | C |
测试:
环境准备
- 初始化一个带
Kibana
的ES
集群- 参考 环境搭建攻略
- 本文使用的是
ES 7.16
,与上文中的集群版本不一致
- 在首页中添加示例数据
add sample data
测试执行
分别执行以下命令,可以得到以下结果
POST kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"adjacency": {"adjacency_matrix": {"filters": {"O": {"terms": {"manufacturer.keyword": ["Oceanavigations"]}},"E": {"terms": {"manufacturer.keyword": ["Elitelligence"]}},"L": {"terms": {"manufacturer.keyword": ["Low Tide Media"]}}}}}}
}
{"took" : 37,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 10000,"relation" : "gte"},"max_score" : null,"hits" : [ ]},"aggregations" : {"adjacency" : {"buckets" : [{"key" : "E","doc_count" : 142214},{"key" : "E&L","doc_count" : 61374},{"key" : "E&O","doc_count" : 31007},{"key" : "L","doc_count" : 161024},{"key" : "L&O","doc_count" : 34019},{"key" : "O","doc_count" : 126266}]}}
}
POST kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"adjacency": {"adjacency_matrix": {"filters": {"O": {"match":{"customer_gender":"FEMALE"}},"E": {"match":{"customer_gender":"MALE"}}}}}}
}
{"took" : 85,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 10000,"relation" : "gte"},"max_score" : null,"hits" : [ ]},"aggregations" : {"adjacency" : {"buckets" : [{"key" : "E","doc_count" : 232447},{"key" : "O","doc_count" : 252530}]}}
}
总结与注意点
邻接矩阵的聚合是作用在同一字段中不同值的交叉对比和聚合(对ES
来说,所有的字段都可以存为数组),所以可以看到结果集会像文章最开头的矩阵一样存在单一标签、组合标签的聚合结果的展示。
filters
的部分是必填的,但是里面填的内容和普通dsl
一样,主要是为了给当前这部分数据进行分组- 分组之后的结果默认用
&
相连,需要自己进行和结果矩阵构建 - 如果标签之间不存在
overlap
的结果,返回的结果就和普通的terms
一样了
使用场景
官方建议是配合date_histogram
做dynamic network analysis
这里我们可以考虑做的是:
- 用户/特征分组,如:年纪在
20~25
岁的用户,在北京
或上海
的用户有多少 - 问题归因,如:同属于
groupA
、groupB
…的服务器有多少
个人理解这个聚合和普通的 terms
的差异在于,某些标签可能为了方便存储和召回会直接以数组方式存储,如果单纯的以 terms
做聚合就会丧失同一条数据多种不同标签的关联关系
FAQ
- Q:官方示例里为啥用
terms
处理两个标签?- A:这个聚合的根本思想是看几个包含
1..N
个标签的组中,每个标签去和其他组做join
,看他们俩俩之间的交集有多少
- A:这个聚合的根本思想是看几个包含
Elasticsearch 聚合系列:adjacency matrix aggregation(邻接矩阵聚合)相关推荐
- 十六.Elasticsearch Adjacency Matrix Aggregation
#下面的执行语句基于6.6版本,新版本把"_doc"去掉即可 PUT /emails/_doc/_bulk?refresh { "index" : { &quo ...
- ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合
Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...
- ElasticSearch 2 (36) - 信息聚合系列之显著项
ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...
- ElasticSearch 2 (38) - 信息聚合系列之结束与思考
ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...
- ElasticSearch 2 (37) - 信息聚合系列之内存与延时
ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...
- ElasticSearch 2 (27) - 信息聚合系列之故事开始
ElasticSearch 2 (27) - 信息聚合系列之故事开始 摘要 到目前为止,本书都在着重介绍搜索.对于搜索,我们有查询条件以及与查找到与条件匹配的集合.这个过程就和如大海捞针一样. 对于聚 ...
- ElasticSearch 2 (34) - 信息聚合系列之多值排序
ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...
- ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)
ElasticSearch聚合+搜索语法学习 目录 搜索+聚合:统计指定品牌下每个颜色的销量 global bucket:单个品牌与所有品牌销量对比 过滤+聚合:统计价格大于1200的电视平均价格 b ...
- Elasticsearch聚合学习之二:区间聚合
本文是<Elasticsearch聚合学习>系列的第二篇,上一篇是我们熟悉了聚合的基本操作,本篇的内容是按照区间聚合的实战操作: 系列文章列表 <Elasticsearch聚合学习之 ...
- ElasticSearch学习笔记之二十一 指标聚合
ElasticSearch学习笔记之二十一 指标聚合 指标聚合 Avg Aggregation Script Value Script Missing value Weighted Avg Aggre ...
最新文章
- Lucene4 入门(2)–Field类及辅助类说明
- 11g新特性:X$DBGALERTEXT一个很酷的内部视图
- 超时机制,断路器模式简介
- 批处理文件总结(三)
- 基于Netty的RPC框架
- JAVA设计模式-单例模式(Singleton)线程安全与效率
- 二类高层建筑中的电子计算机,高层建筑结构计算机计算原理及结果简析
- linux tree命令,Linux tree命令实例详解
- icd植入是大手术吗_手术达人|杨兵:ICD植入术一例
- Typora下载与安装
- oracle所有自带系统表,oracle常用系统表
- Loadrunner报错汇总
- led数码显示控制plc实验_一种LED数码显示的PLC控制程序及方法与流程
- C# 使用Redis实现粉丝好友互粉数据存储和查询
- luckysheet+luckyexcel在线预览excel
- AutoCAD Civil 3D-曲面-1、曲面创建
- Apache之FCGI模式部署LAMP
- PHP的开发效率比java要高,为什么现在java这么流行?
- Linux操作系统网络驱动程序编写
- 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC
热门文章
- 不是谁多情,亦不是谁薄情
- lucene使用facet搜索
- steam显示没网络连接网络连接网络连接服务器,steam无法连接网络,steam显示无法连接网络...
- 双非计算机硕士何去何从(2)
- JavaScript工具函数
- DataMatrix 编码生成和译码原理即方法
- redis连接异常 redis.clients.jedis.exceptions.JedisClusterException CLUSTERDOWN The cluster is down
- linux yum安装scp,CentOS安装scp命令的软件包openssh-clients
- android 内存至少一半,极客修:为什么iPhone比安卓内存小,却更流畅?
- hihocoder 1538