原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-adjacency-matrix-aggregation.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/search-aggregations-bucket-adjacency-matrix-aggregation.html
本地英文版地址: ../en/search-aggregations-bucket-adjacency-matrix-aggregation.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
返回邻接矩阵(adjacency matrix)形式的桶聚合。
该请求提供了命名过滤器表达式的集合,类似于 filters 聚合请求。
响应中的每个桶代表交叉过滤器矩阵中的一个非空单元。
给定名为A、B 和 C的过滤器,响应将返回具有以下名称的桶:
| A | B | C | |
|---|---|---|---|
A |
A |
A&B |
A&C |
B |
B |
B&C |
|
C |
C |
交叉的桶(例如 A&C)使用由 & 符号分隔的两个过滤器名称的组合来标记。
请注意,响应不包括“C&A”桶,因为这是与“A&C”相同的一组文档。
因为矩阵是对称的(symmetric),所以我们只返回它的一半。
为此,我们对过滤器名称字符串进行排序,并始终使用一对名称中最小的一个作为"&"分隔符左侧的值。
如果客户端希望使用默认的&符号之外的分隔符字符串,可以在请求中传递一个替代的 separator参数。
示例:
PUT /emails/_bulk?refresh
{ "index" : { "_id" : 1 } }
{ "accounts" : ["hillary", "sidney"]}
{ "index" : { "_id" : 2 } }
{ "accounts" : ["hillary", "donald"]}
{ "index" : { "_id" : 3 } }
{ "accounts" : ["vladimir", "donald"]}
GET emails/_search
{
"size": 0,
"aggs" : {
"interactions" : {
"adjacency_matrix" : {
"filters" : {
"grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }},
"grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }},
"grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }}
}
}
}
}
}
在上面的例子中,我们分析了 email 消息,以查看哪些组的个人交换了消息。 我们将获得每个组的单独计数,以及记录了交互的组对的消息计数。
响应:
{
"took": 9,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"interactions": {
"buckets": [
{
"key":"grpA",
"doc_count": 2
},
{
"key":"grpA&grpB",
"doc_count": 1
},
{
"key":"grpB",
"doc_count": 2
},
{
"key":"grpB&grpC",
"doc_count": 1
},
{
"key":"grpC",
"doc_count": 1
}
]
}
}
}
这种聚合本身可以提供创建无向加权图所需的所有数据。
但是,当与子聚合(如date_histogram)一起使用时,结果可以提供执行动态网络分析所需的额外级别的数据,在这种情况下,检查一段时间内的交互变得非常重要。