集約メトリックフィールドタイプ
メトリック集約のために事前集約された数値を保存します。aggregate_metric_double
フィールドは、以下のメトリックサブフィールドの1つ以上を含むオブジェクトです: min
, max
, sum
, および value_count
。
`````aggregate_metric_double`````フィールドは、各メトリックサブフィールドの単一の数値[ドキュメント値](/read/elasticsearch-8-15/c2c5ea147183af3a.md)を保存します。配列値はサポートされていません。`````min`````, `````max`````, および `````sum`````の値は`````double`````の数値です。`````value_count`````は正の`````long`````の数値です。
#### Python
``````python
resp = client.indices.create(
index="my-index",
mappings={
"properties": {
"my-agg-metric-field": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'my-index',
body: {
mappings: {
properties: {
"my-agg-metric-field": {
type: 'aggregate_metric_double',
metrics: [
'min',
'max',
'sum',
'value_count'
],
default_metric: 'max'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index",
mappings: {
properties: {
"my-agg-metric-field": {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response);
コンソール
PUT my-index
{
"mappings": {
"properties": {
"my-agg-metric-field": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
aggregate_metric_doubleフィールドのパラメータ
metrics
- (必須、文字列の配列) 保存するメトリックサブフィールドの配列。各値はメトリック集約に対応します。有効な値は
min
,max
,sum
, およびvalue_count
です。少なくとも1つの値を指定する必要があります。 default_metric
- (必須、文字列) クエリ、スクリプト、およびサブフィールドを使用しない集約に使用するデフォルトのメトリックサブフィールド。
metrics
配列からの値である必要があります。 time_series_metric
- (オプション、文字列) フィールドを時系列メトリックとしてマークします。値はメトリックタイプです。このパラメータは既存のフィールドに対して更新できません。
- `````gauge
- 任意に増加または減少できる単一の数値を表すメトリック。たとえば、温度や利用可能なディスクスペースです。
null
(デフォルト)- 時系列メトリックではありません。
使用例
- [`````min`````](/read/elasticsearch-8-15/fa470bcf16a49144.md)集約は、すべての`````min`````サブフィールドの最小値を返します。
- [`````max`````](/read/elasticsearch-8-15/e6ff0ce3c2d61e45.md)集約は、すべての`````max`````サブフィールドの最大値を返します。
- [`````sum`````](/read/elasticsearch-8-15/76058ced5f19ab1d.md)集約は、すべての`````sum`````サブフィールドの値の合計を返します。
- [`````value_count`````](/read/elasticsearch-8-15/475a0207d97ea4a0.md)集約は、すべての`````value_count`````サブフィールドの値の合計を返します。
- [`````avg`````](/read/elasticsearch-8-15/76843892cc47a319.md)集約。`````avg`````サブフィールドはなく、`````avg`````集約の結果は`````sum`````および`````value_count`````メトリックを使用して計算されます。`````avg`````集約を実行するには、フィールドは`````sum`````および`````value_count`````メトリックサブフィールドの両方を含む必要があります。
`````aggregate_metric_double`````フィールドで他の集約を実行すると、「サポートされていない集約」エラーが発生します。
最後に、`````aggregate_metric_double`````フィールドは、`````double`````として動作するために`````default_metric`````サブフィールドにその動作を委任する以下のクエリをサポートします:
- [`````exists`````](/read/elasticsearch-8-15/85f5108858595008.md)
- [`````range`````](/read/elasticsearch-8-15/fb20963366642b46.md)
- [`````term`````](/read/elasticsearch-8-15/3a8fe9d13cce9d29.md)
- [`````terms`````](/read/elasticsearch-8-15/819eca3b33ab3885.md)
## 例
以下の[インデックス作成](/read/elasticsearch-8-15/b5c127aabf881d48.md)APIリクエストは、`````agg_metric`````という名前の`````aggregate_metric_double`````フィールドを持つインデックスを作成します。このリクエストは、`````max`````をフィールドの`````default_metric`````として設定します。
#### Python
``````python
resp = client.indices.create(
index="stats-index",
mappings={
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'stats-index',
body: {
mappings: {
properties: {
agg_metric: {
type: 'aggregate_metric_double',
metrics: [
'min',
'max',
'sum',
'value_count'
],
default_metric: 'max'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "stats-index",
mappings: {
properties: {
agg_metric: {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response);
コンソール
PUT stats-index
{
"mappings": {
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
以下のindexAPIリクエストは、agg_metric
フィールドに事前集約データを持つドキュメントを追加します。
Python
resp = client.index(
index="stats-index",
id="1",
document={
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200,
"value_count": 25
}
},
)
print(resp)
resp1 = client.index(
index="stats-index",
id="2",
document={
"agg_metric": {
"min": -93,
"max": 1702.3,
"sum": 300,
"value_count": 25
}
},
)
print(resp1)
Ruby
response = client.index(
index: 'stats-index',
id: 1,
body: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25
}
}
)
puts response
response = client.index(
index: 'stats-index',
id: 2,
body: {
agg_metric: {
min: -93,
max: 1702.3,
sum: 300,
value_count: 25
}
}
)
puts response
Js
const response = await client.index({
index: "stats-index",
id: 1,
document: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25,
},
},
});
console.log(response);
const response1 = await client.index({
index: "stats-index",
id: 2,
document: {
agg_metric: {
min: -93,
max: 1702.3,
sum: 300,
value_count: 25,
},
},
});
console.log(response1);
コンソール
PUT stats-index/_doc/1
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}
PUT stats-index/_doc/2
{
"agg_metric": {
"min": -93.00,
"max": 1702.30,
"sum": 300.00,
"value_count": 25
}
}
min
, max
, sum
, value_count
, および avg
集約をagg_metric
フィールドで実行できます。
Python
resp = client.search(
index="stats-index",
size="0",
aggs={
"metric_min": {
"min": {
"field": "agg_metric"
}
},
"metric_max": {
"max": {
"field": "agg_metric"
}
},
"metric_value_count": {
"value_count": {
"field": "agg_metric"
}
},
"metric_sum": {
"sum": {
"field": "agg_metric"
}
},
"metric_avg": {
"avg": {
"field": "agg_metric"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'stats-index',
size: 0,
body: {
aggregations: {
metric_min: {
min: {
field: 'agg_metric'
}
},
metric_max: {
max: {
field: 'agg_metric'
}
},
metric_value_count: {
value_count: {
field: 'agg_metric'
}
},
metric_sum: {
sum: {
field: 'agg_metric'
}
},
metric_avg: {
avg: {
field: 'agg_metric'
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "stats-index",
size: 0,
aggs: {
metric_min: {
min: {
field: "agg_metric",
},
},
metric_max: {
max: {
field: "agg_metric",
},
},
metric_value_count: {
value_count: {
field: "agg_metric",
},
},
metric_sum: {
sum: {
field: "agg_metric",
},
},
metric_avg: {
avg: {
field: "agg_metric",
},
},
},
});
console.log(response);
コンソール
POST stats-index/_search?size=0
{
"aggs": {
"metric_min": { "min": { "field": "agg_metric" } },
"metric_max": { "max": { "field": "agg_metric" } },
"metric_value_count": { "value_count": { "field": "agg_metric" } },
"metric_sum": { "sum": { "field": "agg_metric" } },
"metric_avg": { "avg": { "field": "agg_metric" } }
}
}
集約結果は関連するメトリックサブフィールドの値に基づいています。
コンソール-結果
{
...
"aggregations": {
"metric_min": {
"value": -302.5
},
"metric_max": {
"value": 1702.3
},
"metric_value_count": {
"value": 50
},
"metric_sum": {
"value": 500.0
},
"metric_avg": {
"value": 10.0
}
}
}
#### Python
``````python
resp = client.search(
index="stats-index",
query={
"term": {
"agg_metric": {
"value": 702.3
}
}
},
)
print(resp)
`
Ruby
response = client.search(
index: 'stats-index',
body: {
query: {
term: {
agg_metric: {
value: 702.3
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "stats-index",
query: {
term: {
agg_metric: {
value: 702.3,
},
},
},
});
console.log(response);
コンソール
GET stats-index/_search
{
"query": {
"term": {
"agg_metric": {
"value": 702.30
}
}
}
}
検索は次のヒットを返します。default_metric
フィールドの値max
がクエリ値と一致します。
コンソール-結果
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "stats-index",
"_id": "1",
"_score": 1.0,
"_source": {
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200.0,
"value_count": 25
}
}
}
]
}
}
合成 _source
合成_source
は、一般的にTSDBインデックス(index.mode
がtime_series
に設定されているインデックス)でのみ利用可能です。他のインデックスでは、合成_source
は技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために作業しますが、技術プレビュー中の機能は公式GA機能のサポートSLAの対象ではありません。
例えば:
#### Python
``````python
resp = client.indices.create(
index="idx",
mappings={
"_source": {
"mode": "synthetic"
},
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp)
resp1 = client.index(
index="idx",
id="1",
document={
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200,
"value_count": 25
}
},
)
print(resp1)
`
Ruby
response = client.indices.create(
index: 'idx',
body: {
mappings: {
_source: {
mode: 'synthetic'
},
properties: {
agg_metric: {
type: 'aggregate_metric_double',
metrics: [
'min',
'max',
'sum',
'value_count'
],
default_metric: 'max'
}
}
}
}
)
puts response
response = client.index(
index: 'idx',
id: 1,
body: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25
}
}
)
puts response
Js
const response = await client.indices.create({
index: "idx",
mappings: {
_source: {
mode: "synthetic",
},
properties: {
agg_metric: {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "idx",
id: 1,
document: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25,
},
},
});
console.log(response1);
コンソール
PUT idx
{
"mappings": {
"_source": { "mode": "synthetic" },
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
PUT idx/_doc/1
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}
コンソール-結果
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}