字符串统计聚合
编辑字符串统计聚合
编辑一个 多值
指标聚合,用于计算从聚合文档中提取的字符串值的统计信息。这些值可以从特定的 keyword
字段中检索。
字符串统计聚合返回以下结果
-
count
- 计算的非空字段的数量。 -
min_length
- 最短项的长度。 -
max_length
- 最长项的长度。 -
avg_length
- 对所有项计算的平均长度。 -
entropy
- 香农熵 值,计算所有聚合收集的项。香农熵量化了字段中包含的信息量。它是一个非常有用的指标,用于衡量数据集的各种属性,例如多样性、相似性、随机性等。
例如
resp = client.search( index="my-index-000001", size="0", aggs={ "message_stats": { "string_stats": { "field": "message.keyword" } } }, ) print(resp)
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword' } } } } ) puts response
const response = await client.search({ index: "my-index-000001", size: 0, aggs: { message_stats: { string_stats: { field: "message.keyword", }, }, }, }); console.log(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
) 参数。
resp = client.search( index="my-index-000001", size="0", aggs={ "message_stats": { "string_stats": { "field": "message.keyword", "show_distribution": True } } }, ) print(resp)
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword', show_distribution: true } } } } ) puts response
const response = await client.search({ index: "my-index-000001", size: 0, aggs: { message_stats: { string_stats: { field: "message.keyword", show_distribution: true, }, }, }, }); console.log(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
,请在运行时字段上运行聚合。
resp = client.search( index="my-index-000001", size=0, runtime_mappings={ "message_and_context": { "type": "keyword", "script": "\n emit(doc['message.keyword'].value + ' ' + doc['context.keyword'].value)\n " } }, aggs={ "message_stats": { "string_stats": { "field": "message_and_context" } } }, ) print(resp)
const response = await client.search({ index: "my-index-000001", size: 0, runtime_mappings: { message_and_context: { type: "keyword", script: "\n emit(doc['message.keyword'].value + ' ' + doc['context.keyword'].value)\n ", }, }, aggs: { message_stats: { string_stats: { field: "message_and_context", }, }, }, }); console.log(response);
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
参数定义了应如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。
resp = client.search( index="my-index-000001", size="0", aggs={ "message_stats": { "string_stats": { "field": "message.keyword", "missing": "[empty message]" } } }, ) print(resp)
response = client.search( index: 'my-index-000001', size: 0, body: { aggregations: { message_stats: { string_stats: { field: 'message.keyword', missing: '[empty message]' } } } } ) puts response
const response = await client.search({ index: "my-index-000001", size: 0, aggs: { message_stats: { string_stats: { field: "message.keyword", missing: "[empty message]", }, }, }, }); console.log(response);