集約メトリックフィールドタイプ

メトリック集約のために事前集約された数値を保存します。aggregate_metric_doubleフィールドは、以下のメトリックサブフィールドの1つ以上を含むオブジェクトです: min, max, sum, および value_count

  1. `````aggregate_metric_double`````フィールドは、各メトリックサブフィールドの単一の数値[ドキュメント値](/read/elasticsearch-8-15/c2c5ea147183af3a.md)を保存します。配列値はサポートされていません。`````min`````, `````max`````, および `````sum`````の値は`````double`````の数値です。`````value_count`````は正の`````long`````の数値です。
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="my-index",
  6. mappings={
  7. "properties": {
  8. "my-agg-metric-field": {
  9. "type": "aggregate_metric_double",
  10. "metrics": [
  11. "min",
  12. "max",
  13. "sum",
  14. "value_count"
  15. ],
  16. "default_metric": "max"
  17. }
  18. }
  19. },
  20. )
  21. print(resp)
  22. `

Ruby

  1. response = client.indices.create(
  2. index: 'my-index',
  3. body: {
  4. mappings: {
  5. properties: {
  6. "my-agg-metric-field": {
  7. type: 'aggregate_metric_double',
  8. metrics: [
  9. 'min',
  10. 'max',
  11. 'sum',
  12. 'value_count'
  13. ],
  14. default_metric: 'max'
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index",
  3. mappings: {
  4. properties: {
  5. "my-agg-metric-field": {
  6. type: "aggregate_metric_double",
  7. metrics: ["min", "max", "sum", "value_count"],
  8. default_metric: "max",
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT my-index
  2. {
  3. "mappings": {
  4. "properties": {
  5. "my-agg-metric-field": {
  6. "type": "aggregate_metric_double",
  7. "metrics": [ "min", "max", "sum", "value_count" ],
  8. "default_metric": "max"
  9. }
  10. }
  11. }
  12. }

aggregate_metric_doubleフィールドのパラメータ

  • metrics
  • (必須、文字列の配列) 保存するメトリックサブフィールドの配列。各値はメトリック集約に対応します。有効な値はmin, max, sum, および value_countです。少なくとも1つの値を指定する必要があります。
  • default_metric
  • (必須、文字列) クエリ、スクリプト、およびサブフィールドを使用しない集約に使用するデフォルトのメトリックサブフィールド。metrics配列からの値である必要があります。
  • time_series_metric
  • (オプション、文字列) フィールドを時系列メトリックとしてマークします。値はメトリックタイプです。このパラメータは既存のフィールドに対して更新できません。
    1. - `````gauge
    • 任意に増加または減少できる単一の数値を表すメトリック。たとえば、温度や利用可能なディスクスペースです。
    • null (デフォルト)
    • 時系列メトリックではありません。

使用例

  1. - [`````min`````](/read/elasticsearch-8-15/fa470bcf16a49144.md)集約は、すべての`````min`````サブフィールドの最小値を返します。
  2. - [`````max`````](/read/elasticsearch-8-15/e6ff0ce3c2d61e45.md)集約は、すべての`````max`````サブフィールドの最大値を返します。
  3. - [`````sum`````](/read/elasticsearch-8-15/76058ced5f19ab1d.md)集約は、すべての`````sum`````サブフィールドの値の合計を返します。
  4. - [`````value_count`````](/read/elasticsearch-8-15/475a0207d97ea4a0.md)集約は、すべての`````value_count`````サブフィールドの値の合計を返します。
  5. - [`````avg`````](/read/elasticsearch-8-15/76843892cc47a319.md)集約。`````avg`````サブフィールドはなく、`````avg`````集約の結果は`````sum`````および`````value_count`````メトリックを使用して計算されます。`````avg`````集約を実行するには、フィールドは`````sum`````および`````value_count`````メトリックサブフィールドの両方を含む必要があります。
  6. `````aggregate_metric_double`````フィールドで他の集約を実行すると、「サポートされていない集約」エラーが発生します。
  7. 最後に、`````aggregate_metric_double`````フィールドは、`````double`````として動作するために`````default_metric`````サブフィールドにその動作を委任する以下のクエリをサポートします:
  8. - [`````exists`````](/read/elasticsearch-8-15/85f5108858595008.md)
  9. - [`````range`````](/read/elasticsearch-8-15/fb20963366642b46.md)
  10. - [`````term`````](/read/elasticsearch-8-15/3a8fe9d13cce9d29.md)
  11. - [`````terms`````](/read/elasticsearch-8-15/819eca3b33ab3885.md)
  12. ## 例
  13. 以下の[インデックス作成](/read/elasticsearch-8-15/b5c127aabf881d48.md)APIリクエストは、`````agg_metric`````という名前の`````aggregate_metric_double`````フィールドを持つインデックスを作成します。このリクエストは、`````max`````をフィールドの`````default_metric`````として設定します。
  14. #### Python
  15. ``````python
  16. resp = client.indices.create(
  17. index="stats-index",
  18. mappings={
  19. "properties": {
  20. "agg_metric": {
  21. "type": "aggregate_metric_double",
  22. "metrics": [
  23. "min",
  24. "max",
  25. "sum",
  26. "value_count"
  27. ],
  28. "default_metric": "max"
  29. }
  30. }
  31. },
  32. )
  33. print(resp)
  34. `

Ruby

  1. response = client.indices.create(
  2. index: 'stats-index',
  3. body: {
  4. mappings: {
  5. properties: {
  6. agg_metric: {
  7. type: 'aggregate_metric_double',
  8. metrics: [
  9. 'min',
  10. 'max',
  11. 'sum',
  12. 'value_count'
  13. ],
  14. default_metric: 'max'
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.indices.create({
  2. index: "stats-index",
  3. mappings: {
  4. properties: {
  5. agg_metric: {
  6. type: "aggregate_metric_double",
  7. metrics: ["min", "max", "sum", "value_count"],
  8. default_metric: "max",
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT stats-index
  2. {
  3. "mappings": {
  4. "properties": {
  5. "agg_metric": {
  6. "type": "aggregate_metric_double",
  7. "metrics": [ "min", "max", "sum", "value_count" ],
  8. "default_metric": "max"
  9. }
  10. }
  11. }
  12. }

以下のindexAPIリクエストは、agg_metricフィールドに事前集約データを持つドキュメントを追加します。

Python

  1. resp = client.index(
  2. index="stats-index",
  3. id="1",
  4. document={
  5. "agg_metric": {
  6. "min": -302.5,
  7. "max": 702.3,
  8. "sum": 200,
  9. "value_count": 25
  10. }
  11. },
  12. )
  13. print(resp)
  14. resp1 = client.index(
  15. index="stats-index",
  16. id="2",
  17. document={
  18. "agg_metric": {
  19. "min": -93,
  20. "max": 1702.3,
  21. "sum": 300,
  22. "value_count": 25
  23. }
  24. },
  25. )
  26. print(resp1)

Ruby

  1. response = client.index(
  2. index: 'stats-index',
  3. id: 1,
  4. body: {
  5. agg_metric: {
  6. min: -302.5,
  7. max: 702.3,
  8. sum: 200,
  9. value_count: 25
  10. }
  11. }
  12. )
  13. puts response
  14. response = client.index(
  15. index: 'stats-index',
  16. id: 2,
  17. body: {
  18. agg_metric: {
  19. min: -93,
  20. max: 1702.3,
  21. sum: 300,
  22. value_count: 25
  23. }
  24. }
  25. )
  26. puts response

Js

  1. const response = await client.index({
  2. index: "stats-index",
  3. id: 1,
  4. document: {
  5. agg_metric: {
  6. min: -302.5,
  7. max: 702.3,
  8. sum: 200,
  9. value_count: 25,
  10. },
  11. },
  12. });
  13. console.log(response);
  14. const response1 = await client.index({
  15. index: "stats-index",
  16. id: 2,
  17. document: {
  18. agg_metric: {
  19. min: -93,
  20. max: 1702.3,
  21. sum: 300,
  22. value_count: 25,
  23. },
  24. },
  25. });
  26. console.log(response1);

コンソール

  1. PUT stats-index/_doc/1
  2. {
  3. "agg_metric": {
  4. "min": -302.50,
  5. "max": 702.30,
  6. "sum": 200.0,
  7. "value_count": 25
  8. }
  9. }
  10. PUT stats-index/_doc/2
  11. {
  12. "agg_metric": {
  13. "min": -93.00,
  14. "max": 1702.30,
  15. "sum": 300.00,
  16. "value_count": 25
  17. }
  18. }

min, max, sum, value_count, および avg集約をagg_metricフィールドで実行できます。

Python

  1. resp = client.search(
  2. index="stats-index",
  3. size="0",
  4. aggs={
  5. "metric_min": {
  6. "min": {
  7. "field": "agg_metric"
  8. }
  9. },
  10. "metric_max": {
  11. "max": {
  12. "field": "agg_metric"
  13. }
  14. },
  15. "metric_value_count": {
  16. "value_count": {
  17. "field": "agg_metric"
  18. }
  19. },
  20. "metric_sum": {
  21. "sum": {
  22. "field": "agg_metric"
  23. }
  24. },
  25. "metric_avg": {
  26. "avg": {
  27. "field": "agg_metric"
  28. }
  29. }
  30. },
  31. )
  32. print(resp)

Ruby

  1. response = client.search(
  2. index: 'stats-index',
  3. size: 0,
  4. body: {
  5. aggregations: {
  6. metric_min: {
  7. min: {
  8. field: 'agg_metric'
  9. }
  10. },
  11. metric_max: {
  12. max: {
  13. field: 'agg_metric'
  14. }
  15. },
  16. metric_value_count: {
  17. value_count: {
  18. field: 'agg_metric'
  19. }
  20. },
  21. metric_sum: {
  22. sum: {
  23. field: 'agg_metric'
  24. }
  25. },
  26. metric_avg: {
  27. avg: {
  28. field: 'agg_metric'
  29. }
  30. }
  31. }
  32. }
  33. )
  34. puts response

Js

  1. const response = await client.search({
  2. index: "stats-index",
  3. size: 0,
  4. aggs: {
  5. metric_min: {
  6. min: {
  7. field: "agg_metric",
  8. },
  9. },
  10. metric_max: {
  11. max: {
  12. field: "agg_metric",
  13. },
  14. },
  15. metric_value_count: {
  16. value_count: {
  17. field: "agg_metric",
  18. },
  19. },
  20. metric_sum: {
  21. sum: {
  22. field: "agg_metric",
  23. },
  24. },
  25. metric_avg: {
  26. avg: {
  27. field: "agg_metric",
  28. },
  29. },
  30. },
  31. });
  32. console.log(response);

コンソール

  1. POST stats-index/_search?size=0
  2. {
  3. "aggs": {
  4. "metric_min": { "min": { "field": "agg_metric" } },
  5. "metric_max": { "max": { "field": "agg_metric" } },
  6. "metric_value_count": { "value_count": { "field": "agg_metric" } },
  7. "metric_sum": { "sum": { "field": "agg_metric" } },
  8. "metric_avg": { "avg": { "field": "agg_metric" } }
  9. }
  10. }

集約結果は関連するメトリックサブフィールドの値に基づいています。

コンソール-結果

  1. {
  2. ...
  3. "aggregations": {
  4. "metric_min": {
  5. "value": -302.5
  6. },
  7. "metric_max": {
  8. "value": 1702.3
  9. },
  10. "metric_value_count": {
  11. "value": 50
  12. },
  13. "metric_sum": {
  14. "value": 500.0
  15. },
  16. "metric_avg": {
  17. "value": 10.0
  18. }
  19. }
  20. }
  1. #### Python
  2. ``````python
  3. resp = client.search(
  4. index="stats-index",
  5. query={
  6. "term": {
  7. "agg_metric": {
  8. "value": 702.3
  9. }
  10. }
  11. },
  12. )
  13. print(resp)
  14. `

Ruby

  1. response = client.search(
  2. index: 'stats-index',
  3. body: {
  4. query: {
  5. term: {
  6. agg_metric: {
  7. value: 702.3
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.search({
  2. index: "stats-index",
  3. query: {
  4. term: {
  5. agg_metric: {
  6. value: 702.3,
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

コンソール

  1. GET stats-index/_search
  2. {
  3. "query": {
  4. "term": {
  5. "agg_metric": {
  6. "value": 702.30
  7. }
  8. }
  9. }
  10. }

検索は次のヒットを返します。default_metricフィールドの値maxがクエリ値と一致します。

コンソール-結果

  1. {
  2. ...
  3. "hits": {
  4. "total": {
  5. "value": 1,
  6. "relation": "eq"
  7. },
  8. "max_score": 1.0,
  9. "hits": [
  10. {
  11. "_index": "stats-index",
  12. "_id": "1",
  13. "_score": 1.0,
  14. "_source": {
  15. "agg_metric": {
  16. "min": -302.5,
  17. "max": 702.3,
  18. "sum": 200.0,
  19. "value_count": 25
  20. }
  21. }
  22. }
  23. ]
  24. }
  25. }

合成 _source

合成_sourceは、一般的にTSDBインデックス(index.modetime_seriesに設定されているインデックス)でのみ利用可能です。他のインデックスでは、合成_sourceは技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために作業しますが、技術プレビュー中の機能は公式GA機能のサポートSLAの対象ではありません。

  1. 例えば:
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="idx",
  6. mappings={
  7. "_source": {
  8. "mode": "synthetic"
  9. },
  10. "properties": {
  11. "agg_metric": {
  12. "type": "aggregate_metric_double",
  13. "metrics": [
  14. "min",
  15. "max",
  16. "sum",
  17. "value_count"
  18. ],
  19. "default_metric": "max"
  20. }
  21. }
  22. },
  23. )
  24. print(resp)
  25. resp1 = client.index(
  26. index="idx",
  27. id="1",
  28. document={
  29. "agg_metric": {
  30. "min": -302.5,
  31. "max": 702.3,
  32. "sum": 200,
  33. "value_count": 25
  34. }
  35. },
  36. )
  37. print(resp1)
  38. `

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. agg_metric: {
  10. type: 'aggregate_metric_double',
  11. metrics: [
  12. 'min',
  13. 'max',
  14. 'sum',
  15. 'value_count'
  16. ],
  17. default_metric: 'max'
  18. }
  19. }
  20. }
  21. }
  22. )
  23. puts response
  24. response = client.index(
  25. index: 'idx',
  26. id: 1,
  27. body: {
  28. agg_metric: {
  29. min: -302.5,
  30. max: 702.3,
  31. sum: 200,
  32. value_count: 25
  33. }
  34. }
  35. )
  36. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. agg_metric: {
  9. type: "aggregate_metric_double",
  10. metrics: ["min", "max", "sum", "value_count"],
  11. default_metric: "max",
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);
  17. const response1 = await client.index({
  18. index: "idx",
  19. id: 1,
  20. document: {
  21. agg_metric: {
  22. min: -302.5,
  23. max: 702.3,
  24. sum: 200,
  25. value_count: 25,
  26. },
  27. },
  28. });
  29. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "agg_metric": {
  7. "type": "aggregate_metric_double",
  8. "metrics": [ "min", "max", "sum", "value_count" ],
  9. "default_metric": "max"
  10. }
  11. }
  12. }
  13. }
  14. PUT idx/_doc/1
  15. {
  16. "agg_metric": {
  17. "min": -302.50,
  18. "max": 702.30,
  19. "sum": 200.0,
  20. "value_count": 25
  21. }
  22. }

次のようになります:

コンソール-結果

  1. {
  2. "agg_metric": {
  3. "min": -302.50,
  4. "max": 702.30,
  5. "sum": 200.0,
  6. "value_count": 25
  7. }
  8. }