統計集計
集約された文書から抽出された数値に基づいて統計を計算する multi-value
メトリクス集計です。
返される統計は、min
、max
、sum
、count
、および avg
で構成されています。
データが学生の試験成績(0から100の間)を表す文書で構成されていると仮定します。
Python
resp = client.search(
index="exams",
size="0",
aggs={
"grades_stats": {
"stats": {
"field": "grade"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'exams',
size: 0,
body: {
aggregations: {
grades_stats: {
stats: {
field: 'grade'
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "exams",
size: 0,
aggs: {
grades_stats: {
stats: {
field: "grade",
},
},
},
});
console.log(response);
コンソール
POST /exams/_search?size=0
{
"aggs": {
"grades_stats": { "stats": { "field": "grade" } }
}
}
上記の集計は、すべての文書に対する成績統計を計算します。集計タイプは stats
で、field
設定は統計が計算される文書の数値フィールドを定義します。上記は次の結果を返します:
コンソール-結果
{
...
"aggregations": {
"grades_stats": {
"count": 2,
"min": 50.0,
"max": 100.0,
"avg": 75.0,
"sum": 150.0
}
}
}
集計の名前(上記の grades_stats
)は、返されたレスポンスから集計結果を取得するためのキーとしても機能します。
スクリプト
単一のフィールドよりも複雑な何かのために stats
を取得する必要がある場合は、ランタイムフィールドで集計を実行してください。
Python
resp = client.search(
index="exams",
size=0,
runtime_mappings={
"grade.weighted": {
"type": "double",
"script": "\n emit(doc['grade'].value * doc['weight'].value)\n "
}
},
aggs={
"grades_stats": {
"stats": {
"field": "grade.weighted"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'exams',
body: {
size: 0,
runtime_mappings: {
'grade.weighted' => {
type: 'double',
script: "\n emit(doc['grade'].value * doc['weight'].value)\n "
}
},
aggregations: {
grades_stats: {
stats: {
field: 'grade.weighted'
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "exams",
size: 0,
runtime_mappings: {
"grade.weighted": {
type: "double",
script:
"\n emit(doc['grade'].value * doc['weight'].value)\n ",
},
},
aggs: {
grades_stats: {
stats: {
field: "grade.weighted",
},
},
},
});
console.log(response);
コンソール
POST /exams/_search
{
"size": 0,
"runtime_mappings": {
"grade.weighted": {
"type": "double",
"script": """
emit(doc['grade'].value * doc['weight'].value)
"""
}
},
"aggs": {
"grades_stats": {
"stats": {
"field": "grade.weighted"
}
}
}
}
欠損値
missing
パラメータは、値が欠けている文書がどのように扱われるべきかを定義します。デフォルトでは無視されますが、値があるかのように扱うことも可能です。
Python
resp = client.search(
index="exams",
size="0",
aggs={
"grades_stats": {
"stats": {
"field": "grade",
"missing": 0
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'exams',
size: 0,
body: {
aggregations: {
grades_stats: {
stats: {
field: 'grade',
missing: 0
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "exams",
size: 0,
aggs: {
grades_stats: {
stats: {
field: "grade",
missing: 0,
},
},
},
});
console.log(response);
コンソール
POST /exams/_search?size=0
{
"aggs": {
"grades_stats": {
"stats": {
"field": "grade",
"missing": 0
}
}
}
}
grade フィールドに値がない文書は、値が 0 の文書と同じバケットに入ります。 |