すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:aggs 句

最終更新日:Dec 28, 2024

概要

1 つの検索クエリに基づいて数万件のドキュメントが取得される場合があります。ただし、必要な情報を取得するために、取得したすべてのドキュメントを表示する必要がない場合があります。取得したドキュメントの一部の統計のみを表示する場合は、aggs 句を使用して統計を取得できます。

構文

{
  "aggs" : [
    {
      "group_key": "field",
      "agg_fun" : ["func1", "func2"],
      "agg_filter" : "filter_expression",
      "agg_range" : [number1, number2],
      "max_group" : number,
      "order_by":"count"
    } 
  ]
}
  • group_key: 必須。統計を取得する基準となるフィールド。指定するフィールドは、INTEGER 型または STRING 型の属性フィールドである必要があります。

  • agg_fun: 必須。count()、sum(id)、max(id)、min(id)、distinct_count(id) などの組み込み関数がサポートされています。count() を使用してドキュメント数を計算し、sum(id) を使用して id フィールドの値の合計を取得し、max(id) を使用して id フィールドの最大値を取得し、min(id) を使用して id フィールドの最小値を取得し、distinct_count(id) を使用して id フィールドの個別値の数を計算します。aggs 句に複数の関数を指定して統計を取得できます。

  • agg_filter: オプション。ドキュメントをフィルタリングする基準となる条件。フィルタ条件として論理式を指定できます。詳細については、filter 句を参照してください。

  • agg_range: オプション。システムがデータをクエリする範囲。データ分布に関する情報を取得する場合は、このパラメータを指定できます。aggs 句には 1 つの範囲のみを指定できます。たとえば、数値 1 と数値 2 の間の値の範囲、または数値 2 より大きい値の範囲を指定できます。STRING 型の値を range パラメータの値として指定することはできません。

  • max_group: オプション。返すグループの最大数。デフォルト値: 1000。

  • order_by: オプション。統計結果をソートする基準となる順序。値を count に設定します。このパラメータを指定しない場合、統計結果はデフォルトで group_key パラメータで指定されたフィールドの値の辞書式順序に基づいてソートされます。

例:

  • 単純な統計

    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"]
    		} 
      ]
    }
    
    サンプル統計結果:
    {
      result: {
        facet: [
          {
            key: "group_id",
            items: [
              {
                value: 43,
                sum: 81
              },
              {
                value: 63,
                sum: 91
              }
            ]
          }
        ]
      }
    },

  • 多次元からの統計

    {
      "aggs" : [
        {
          "group_key": "company_id",
          "agg_fun" : ["sum(id)", "max(id)", "min(id)"]
    		} 
      ]
    }

  • 複数のフィールドに基づく統計

    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"]
    		},
        {
          "group_key": "company_id",
          "agg_fun" : ["count()"]
    		} 
      ]
    }

  • 条件に基づく統計

    # price フィールドの値が 100 より大きいドキュメントをクエリします。
    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"],
          "agg_filter" : "price > 100"
    		} 
      ]
    }

  • 準正確な統計

    {
      "aggs" : [
        {
          "group_key": "company_id",
          "agg_fun" : ["distinct_count(brand)"]
    		}
      ]
    }
    aggs 句に distinct_count 関数を含めると、準正確な統計機能が有効になります。準正確な統計機能は、HyperLogLog (HLL) アルゴリズムを使用して統計を取得します。ほとんどの場合、準正確な統計機能を使用して取得された結果の正確な比率は 99% 以上です。

    使用上の注意

    • aggs 句で指定するフィールドは、schema.json ファイルで指定する属性フィールドである必要があります。

    • aggs 句の結果は、Searcher ワーカーの facet ノードに返されます。結果には、aggs 句で指定した関数 (sum()、count() など) を示す agg_fun パラメータが含まれます。

    • aggs 句の結果は、Searcher ワーカーの facet ノードに返されます。facet ノードのデータを取得するには、config 句の format パラメータの値として fulljson を指定します。

    • システムは、最大 100,000 件のドキュメントの正確な統計を返すことができます。パーティション内で指定された条件に一致するドキュメント数が 100,000 を超える場合、エンジンのパフォーマンスの制限により、返される統計が不正確になる可能性があります。クラスタ構成でドキュメントの最大数の制限を変更できます。

    • max_group パラメータが 10000 より大きい値に設定されている場合、Query Result Searcher (QRS) ワーカーで大量のメモリリソースが消費され、メモリ不足 (OOM) エラーが発生する可能性があります。