邻接矩阵聚合

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-adjacency-matrix-aggregation.html

译文链接 : http://apache.wiki/pages/viewpage.action?pageId=10028381

贡献者 : @于永超,ApacheCNApache中文网

一个返回邻接矩阵形式的桶聚合,该请求提供一个名为filter表达式的集合,类似于filters聚合请求,响应中的每个桶表示交叉滤波器矩阵中的非空单元格。

adjacency_matrix聚合是一个新功能,我们可能会随着我们获得有关其使用的反馈而发展设计。 因此,此功能的API可能以非向后兼容的方式更改

给定名为A,B和C的过滤器,响应将返回具有以下名称的buckets(桶):

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

使用由和号字符分隔的两个过滤器名称的组合来标记相交的桶例如A和C。 请注意,响应也不包括“C&A”桶,因为这将与“A&C”相同的一组文档。 矩阵被称为对称的,所以我们只返回一半。 为此,我们对过滤器名称字符串进行排序,并始终使用最低的一对作为“&”分隔符左侧的值。

如果客户端希望使用除&符号的默认值以外的分隔符字符串,则可以在请求中传递替代分隔符参数。

例如:

  1. PUT /emails/message/_bulk?refresh
  2. { "index" : { "_id" : 1 } }
  3. { "accounts" : ["hillary", "sidney"]}
  4. { "index" : { "_id" : 2 } }
  5. { "accounts" : ["hillary", "donald"]}
  6. { "index" : { "_id" : 3 } }
  7. { "accounts" : ["vladimir", "donald"]}
  8. GET emails/message/_search
  9. {
  10. "size": 0,
  11. "aggs" : {
  12. "interactions" : {
  13. "adjacency_matrix" : {
  14. "filters" : {
  15. "grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }},
  16. "grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }},
  17. "grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }}
  18. }
  19. }
  20. }
  21. }
  22. }

在上面的例子中,我们分析电子邮件,以查看哪些人已经交换了消息。 我们将分别获取每个组的计数,并且还记录已记录交互的组对的消息计数。

响应:

  1. {
  2. "took": 9,
  3. "timed_out": false,
  4. "_shards": ...,
  5. "hits": ...,
  6. "aggregations": {
  7. "interactions": {
  8. "buckets": [
  9. {
  10. "key":"grpA",
  11. "doc_count": 2
  12. },
  13. {
  14. "key":"grpA&grpB",
  15. "doc_count": 1
  16. },
  17. {
  18. "key":"grpB",
  19. "doc_count": 2
  20. },
  21. {
  22. "key":"grpB&grpC",
  23. "doc_count": 1
  24. },
  25. {
  26. "key":"grpC",
  27. "doc_count": 1
  28. }
  29. ]
  30. }
  31. }
  32. }

用法

自己可以提供创建无向加权图所需的所有数据。 然而,当与诸如date_histogram的子集合一起使用时,结果可以提供执行 dynamic network analysis(动态网络分析)所需的附加级别的数据,其中随着时间的推移,检查交互变得重要。

局限性

N过滤桶的矩阵可以产生N²/ 2,因此默认最大值为100个过滤器。可以使用index.max_adjacency_matrix_filters索引级别设置更改此设置