文字統計の集約
集約された文書から抽出された文字値に対して統計を計算する multi-value
メトリクス集約です。これらの値は、特定の keyword
フィールドから取得できます。
文字統計の集約は、以下の結果を返します:
count
- カウントされた非空フィールドの数。min_length
- 最短用語の長さ。max_length
- 最長用語の長さ。avg_length
- すべての用語に対して計算された平均長。entropy
- 集約によって収集されたすべての用語に対して計算された シャノンエントロピー 値。シャノンエントロピーは、フィールドに含まれる情報の量を定量化します。これは、データセットの多様性、類似性、ランダム性など、さまざまな特性を測定するための非常に有用な指標です。
例えば:
Python
resp = client.search(
index="my-index-000001",
size="0",
aggs={
"message_stats": {
"string_stats": {
"field": "message.keyword"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
size: 0,
body: {
aggregations: {
message_stats: {
string_stats: {
field: 'message.keyword'
}
}
}
}
)
puts response
Js
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
)パラメータを追加できます。
Python
resp = client.search(
index="my-index-000001",
size="0",
aggs={
"message_stats": {
"string_stats": {
"field": "message.keyword",
"show_distribution": True
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
size: 0,
body: {
aggregations: {
message_stats: {
string_stats: {
field: 'message.keyword',
show_distribution: true
}
}
}
}
)
puts response
Js
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
}
}
}
}
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
を取得する必要がある場合は、ランタイムフィールドで集約を実行します。
Python
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)
Js
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
パラメータは、値が欠損している文書がどのように扱われるべきかを定義します。デフォルトでは無視されますが、値があるかのように扱うことも可能です。
Python
resp = client.search(
index="my-index-000001",
size="0",
aggs={
"message_stats": {
"string_stats": {
"field": "message.keyword",
"missing": "[empty message]"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
size: 0,
body: {
aggregations: {
message_stats: {
string_stats: {
field: 'message.keyword',
missing: '[empty message]'
}
}
}
}
)
puts response
Js
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);
コンソール
POST /my-index-000001/_search?size=0
{
"aggs": {
"message_stats": {
"string_stats": {
"field": "message.keyword",
"missing": "[empty message]"
}
}
}
}
message フィールドに値がない文書は、[empty message] の値を持つ文書として扱われます。 |