原英文版地址: 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"
}
}
}
}
}
}