字符串统计聚合
编辑字符串统计聚合编辑
一个 multi-value
指标聚合,它计算从聚合文档中提取的字符串值的统计信息。这些值可以从特定的 keyword
字段中检索。
字符串统计聚合返回以下结果
-
count
- 统计的非空字段数。 -
min_length
- 最短词的长度。 -
max_length
- 最长词的长度。 -
avg_length
- 所有词的平均长度。 -
entropy
- 所有由聚合收集的词计算的 香农熵 值。香农熵量化了字段中包含的信息量。它是一个非常有用的指标,用于衡量数据集的各种属性,例如多样性、相似性、随机性等。
例如
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword' } } } } ) puts response
POST /my-index-000001/_search?size=0 { "aggs": { "message_stats": { "string_stats": { "field": "message.keyword" } } } }
上面的聚合计算了所有文档中 message
字段的字符串统计信息。聚合类型是 string_stats
,field
参数定义了将计算统计信息的文档字段。上面将返回以下内容
{ ... "aggregations": { "message_stats": { "count": 5, "min_length": 24, "max_length": 30, "avg_length": 28.8, "entropy": 3.94617750050791 } } }
聚合的名称(上面的 message_stats
)也用作键,通过该键可以从返回的响应中检索聚合结果。
字符分布编辑
香农熵值的计算基于每个字符出现在聚合收集的所有词中的概率。要查看所有字符的概率分布,我们可以添加 show_distribution
(默认值:false
)参数。
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword', show_distribution: true } } } } ) puts response
POST /my-index-000001/_search?size=0 { "aggs": { "message_stats": { "string_stats": { "field": "message.keyword", "show_distribution": true } } } }
{ ... "aggregations": { "message_stats": { "count": 5, "min_length": 24, "max_length": 30, "avg_length": 28.8, "entropy": 3.94617750050791, "distribution": { " ": 0.1527777777777778, "e": 0.14583333333333334, "s": 0.09722222222222222, "m": 0.08333333333333333, "t": 0.0763888888888889, "h": 0.0625, "a": 0.041666666666666664, "i": 0.041666666666666664, "r": 0.041666666666666664, "g": 0.034722222222222224, "n": 0.034722222222222224, "o": 0.034722222222222224, "u": 0.034722222222222224, "b": 0.027777777777777776, "w": 0.027777777777777776, "c": 0.013888888888888888, "E": 0.006944444444444444, "l": 0.006944444444444444, "1": 0.006944444444444444, "2": 0.006944444444444444, "3": 0.006944444444444444, "4": 0.006944444444444444, "y": 0.006944444444444444 } } } }
distribution
对象显示每个字符出现在所有词中的概率。字符按概率降序排序。
脚本编辑
如果您需要获取比单个字段更复杂的内容的 string_stats
,请在 运行时字段 上运行聚合。
POST /my-index-000001/_search { "size": 0, "runtime_mappings": { "message_and_context": { "type": "keyword", "script": """ emit(doc['message.keyword'].value + ' ' + doc['context.keyword'].value) """ } }, "aggs": { "message_stats": { "string_stats": { "field": "message_and_context" } } } }
缺失值编辑
missing
参数定义了如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword', missing: '[empty message]' } } } } ) puts response