5.2.1. 邻接矩阵聚合
邻接矩阵聚合
桶聚合返回一种形式的邻接矩阵。 该请求提供了一个命名过滤器表达式的集合,类似于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”属于同一组文档。据说矩阵是对称的,所以我们只返回一半。为此,我们对过滤器名称字符串进行排序,并始终使用一对中的最低值作为“&”分隔符左侧的值。
如果客户端希望使用除与号默认值以外的分隔符字符串,则可以在请求中传递替代的分隔符
参数。
例:
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"] }}
}
}
}
}
}
在上面的示例中,我们分析了电子邮件,以查看哪些个人已交换了消息。我们将分别获取每个组的计数,以及已记录交互的成对组的消息计数。
响应:
{
"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
之类的子聚合一起使用时,结果可以提供执行动态网络分析所需的附加数据级别检查互动随着时间的推移变得重要。
限制
对于 N 个过滤器,所产生的存储桶矩阵可以为 N²/ 2,因此默认情况下最大限制为100个过滤器。可以使用index.max_adjacency_matrix_filters
索引级别设置更改此设置。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。