adjacency matrix aggregation

邻接矩阵聚合

定义

对某个字段的值做矩阵,返回单独满足一个/同时满足两个的结果

A B C
A A A&B A&C
B B B&C
C C

测试:

环境准备

  1. 初始化一个带 KibanaES 集群

    1. 参考 环境搭建攻略
    2. 本文使用的是 ES 7.16,与上文中的集群版本不一致
  2. 在首页中添加示例数据 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来说,所有的字段都可以存为数组),所以可以看到结果集会像文章最开头的矩阵一样存在单一标签、组合标签的聚合结果的展示。

  1. filters 的部分是必填的,但是里面填的内容和普通 dsl 一样,主要是为了给当前这部分数据进行分组
  2. 分组之后的结果默认用 & 相连,需要自己进行和结果矩阵构建
  3. 如果标签之间不存在 overlap 的结果,返回的结果就和普通的 terms 一样了

使用场景

官方建议是配合date_histogram做dynamic network analysis

这里我们可以考虑做的是:

  1. 用户/特征分组,如:年纪在 20~25 岁的用户,在 北京上海 的用户有多少
  2. 问题归因,如:同属于 groupAgroupB…的服务器有多少

个人理解这个聚合和普通的 terms 的差异在于,某些标签可能为了方便存储和召回会直接以数组方式存储,如果单纯的以 terms 做聚合就会丧失同一条数据多种不同标签的关联关系

FAQ

  1. Q:官方示例里为啥用 terms 处理两个标签?

    1. A:这个聚合的根本思想是看几个包含 1..N 个标签的组中,每个标签去和其他组做 join,看他们俩俩之间的交集有多少

Elasticsearch 聚合系列:adjacency matrix aggregation(邻接矩阵聚合)相关推荐

  1. 十六.Elasticsearch Adjacency Matrix Aggregation

    #下面的执行语句基于6.6版本,新版本把"_doc"去掉即可 PUT /emails/_doc/_bulk?refresh { "index" : { &quo ...

  2. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

  3. ElasticSearch 2 (36) - 信息聚合系列之显著项

    ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...

  4. ElasticSearch 2 (38) - 信息聚合系列之结束与思考

    ElasticSearch 2 (38) - 信息聚合系列之结束与思考 摘要 版本 elasticsearch版本: elasticsearch-2.x 内容 本小节涵盖了许多基本理论以及很多深入的技 ...

  5. ElasticSearch 2 (37) - 信息聚合系列之内存与延时

    ElasticSearch 2 (37) - 信息聚合系列之内存与延时 摘要 控制内存使用与延时 版本 elasticsearch版本: elasticsearch-2.x 内容 Fielddata ...

  6. ElasticSearch 2 (27) - 信息聚合系列之故事开始

    ElasticSearch 2 (27) - 信息聚合系列之故事开始 摘要 到目前为止,本书都在着重介绍搜索.对于搜索,我们有查询条件以及与查找到与条件匹配的集合.这个过程就和如大海捞针一样. 对于聚 ...

  7. ElasticSearch 2 (34) - 信息聚合系列之多值排序

    ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...

  8. ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)

    ElasticSearch聚合+搜索语法学习 目录 搜索+聚合:统计指定品牌下每个颜色的销量 global bucket:单个品牌与所有品牌销量对比 过滤+聚合:统计价格大于1200的电视平均价格 b ...

  9. Elasticsearch聚合学习之二:区间聚合

    本文是<Elasticsearch聚合学习>系列的第二篇,上一篇是我们熟悉了聚合的基本操作,本篇的内容是按照区间聚合的实战操作: 系列文章列表 <Elasticsearch聚合学习之 ...

  10. ElasticSearch学习笔记之二十一 指标聚合

    ElasticSearch学习笔记之二十一 指标聚合 指标聚合 Avg Aggregation Script Value Script Missing value Weighted Avg Aggre ...

最新文章

  1. Lucene4 入门(2)–Field类及辅助类说明
  2. 11g新特性:X$DBGALERTEXT一个很酷的内部视图
  3. 超时机制,断路器模式简介
  4. 批处理文件总结(三)
  5. 基于Netty的RPC框架
  6. JAVA设计模式-单例模式(Singleton)线程安全与效率
  7. 二类高层建筑中的电子计算机,高层建筑结构计算机计算原理及结果简析
  8. linux tree命令,Linux tree命令实例详解
  9. icd植入是大手术吗_手术达人|杨兵:ICD植入术一例
  10. Typora下载与安装
  11. oracle所有自带系统表,oracle常用系统表
  12. Loadrunner报错汇总
  13. led数码显示控制plc实验_一种LED数码显示的PLC控制程序及方法与流程
  14. C# 使用Redis实现粉丝好友互粉数据存储和查询
  15. luckysheet+luckyexcel在线预览excel
  16. AutoCAD Civil 3D-曲面-1、曲面创建
  17. Apache之FCGI模式部署LAMP
  18. PHP的开发效率比java要高,为什么现在java这么流行?
  19. Linux操作系统网络驱动程序编写
  20. 《深入理解java虚拟机v3》对象优先在Eden分配 > 代码单3-7 新生代Minor GC

热门文章

  1. 不是谁多情,亦不是谁薄情
  2. lucene使用facet搜索
  3. steam显示没网络连接网络连接网络连接服务器,steam无法连接网络,steam显示无法连接网络...
  4. 双非计算机硕士何去何从(2)
  5. JavaScript工具函数
  6. DataMatrix 编码生成和译码原理即方法
  7. redis连接异常 redis.clients.jedis.exceptions.JedisClusterException CLUSTERDOWN The cluster is down
  8. linux yum安装scp,CentOS安装scp命令的软件包openssh-clients
  9. android 内存至少一半,极客修:为什么iPhone比安卓内存小,却更流畅?
  10. hihocoder 1538