字符串统计聚合
编辑字符串统计聚合
编辑一种多值
度量聚合,用于计算从聚合文档中提取的字符串值的统计信息。这些值可以从特定的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);