原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-metrics-string-stats-aggregation.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/search-aggregations-metrics-string-stats-aggregation.html
本地英文版地址: ../en/search-aggregations-metrics-string-stats-aggregation.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
一种multi-value
(多值) 度量聚合,计算从聚合文档中提取的字符串值的统计数据。
这些值可以从文档中指定的 keyword
字段中检索,也可以由提供的脚本生成。
字符串统计信息聚合返回以下结果:
-
count
- 计算的非空字段的数量。 -
min_length
- 最短的词项的长度。 -
max_length
- 最长的词项的长度。 -
avg_length
- 所有词项的平均长度。 -
entropy
- 对聚合收集的所有术语计算的香农熵(Shannon Entropy)。 香农熵量化了字段中包含的信息量。 这是一个非常有用的度量,用于测量数据集的各种属性,如多样性、相似性、随机性等。
假设数据由 twitter 消息组成:
POST /twitter/_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
)也用作 key,通过它可以从返回的响应中检索聚合结果。
香农熵(Shannon Entropy)的计算基于每个字符出现在聚合收集的所有词项中的概率。
要查看所有字符的概率分布,可以添加参数 show_distribution
(默认值:false
)。
POST /twitter/_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
对象显示每个字符在所有词项中出现的概率。字符按概率降序排列。
基于脚本计算消息(message)的字符串统计信息:
POST /twitter/_search?size=0 { "aggs" : { "message_stats" : { "string_stats" : { "script" : { "lang": "painless", "source": "doc['message.keyword'].value" } } } } }
这将把 script
参数解释为一个inline
(内联) 脚本,使用 painless
(无痛) 脚本语言,没有脚本参数。
要使用存储的脚本,请使用以下语法:
POST /twitter/_search?size=0 { "aggs" : { "message_stats" : { "string_stats" : { "script" : { "id": "my_script", "params" : { "field" : "message.keyword" } } } } } }