邻接矩阵聚合
编辑邻接矩阵聚合编辑
一种桶聚合,返回一种 邻接矩阵 的形式。请求提供一组命名的过滤器表达式,类似于 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
相同的文档集。该矩阵被称为对称矩阵,因此我们只返回它的一半。为此,我们对过滤器名称字符串进行排序,并始终使用一对中较小的值作为分隔符左侧的值。
示例编辑
以下 interactions
聚合使用 adjacency_matrix
来确定哪些个人组之间交换了电子邮件。
response = client.bulk( index: 'emails', refresh: true, body: [ { index: { _id: 1 } }, { accounts: [ 'hillary', 'sidney' ] }, { index: { _id: 2 } }, { accounts: [ 'hillary', 'donald' ] }, { index: { _id: 3 } }, { accounts: [ 'vladimir', 'donald' ] } ] ) puts response response = client.search( index: 'emails', body: { size: 0, aggregations: { interactions: { adjacency_matrix: { filters: { "grpA": { terms: { accounts: [ 'hillary', 'sidney' ] } }, "grpB": { terms: { accounts: [ 'donald', 'mitt' ] } }, "grpC": { terms: { accounts: [ 'vladimir', 'nigel' ] } } } } } } } ) puts response
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 } ] } } }
参数编辑
-
filters
-
(必需,对象) 用于创建桶的过滤器。
filters
的属性-
<filter>
-
(必需,查询 DSL 对象) 用于过滤文档的查询。键是过滤器名称。
至少需要一个过滤器。过滤器的总数不能超过
indices.query.bool.max_clause_count
设置。请参阅 过滤器限制。
-
-
separator
- (可选,字符串) 用于连接过滤器名称的分隔符。默认为
&
。
响应主体编辑
-
key
- (字符串) 桶的过滤器。如果桶使用多个过滤器,则使用
separator
连接过滤器名称。 -
doc_count
- (整数) 与桶的过滤器匹配的文档数量。
用法编辑
此聚合本身可以提供创建无向加权图所需的所有数据。但是,当与子聚合(例如 date_histogram
)一起使用时,结果可以提供执行 动态网络分析 所需的额外数据级别,其中检查随时间推移的交互变得很重要。
过滤器限制编辑
对于 N 个过滤器,生成的桶矩阵可以是 N²/2,这可能很昂贵。断路器设置可以防止产生太多桶的结果,并且为了避免过多的磁盘查找,使用 indices.query.bool.max_clause_count
设置来限制过滤器的数量。