集計により、最小値、最大値、合計、平均値、および行のカウントとその個別カウントを取得できます。また、集計を実行し、フィールド値、範囲、地理的位置、またはフィルターで結果をグループ化したり、ネストされたクエリを実行したりすることも可能です。複雑なクエリでは、複数の集計を実行できます。
操作手順
次の図は、集約手順の全体像を示しています。

サーバーは、クエリ条件を満たすデータを照会し、リクエストに基づいてデータを集約します。そのため、集約が必要なリクエストは、集約が不要なリクエストよりも処理が複雑になります。
背景情報
次の表は、集計方法について説明します。
|
方法 |
説明 |
|
最小値 |
フィールドの最小値を返す集計方法です。この方法は、SQL の MIN 関数と同様に使用できます。 |
|
最大値 |
フィールドの最大値を返す集計方法です。この方法は、SQL の MAX 関数と同様に使用できます。 |
|
合計 |
数値フィールドのすべての値の合計を返す集計方法です。この方法は、SQL の SUM 関数と同様に使用できます。 |
|
平均値 |
数値フィールドのすべての値の平均を返す集計方法です。この方法は、SQL の AVG 関数と同様に使用できます。 |
|
カウント |
指定したフィールドの値の総数、または検索インデックス内の行の総数を返す集計方法です。この方法は、SQL の COUNT 関数と同様に使用できます。 |
|
個別カウント |
フィールドの重複しない値の数を返す集計方法です。この方法は、SQL の COUNT(DISTINCT) 関数と同様に使用できます。 |
|
パーセンタイル統計 |
パーセンタイル値は、データセット内における値の相対的な位置を示します。たとえば、システムの日常的な運用保守中に各リクエストの応答時間に関する統計を収集する場合は、p25、p50、p90、p99 などのパーセンタイルを使用して、応答時間の分布を分析する必要があります。 |
|
TopRows |
各グループについて、特定のフィールドに基づいてソートされた上位の行の統計を取得する集計方法です。 |
|
フィールド値によるグループ化 |
フィールド値に基づいてクエリ結果をグループ化する集計方法です。同じ値は同じグループにまとめられます。各グループの値と、そのグループに含まれる行数が返されます。 説明
グループ内の値の数が非常に多い場合、計算された数は実際の数と異なる場合があります。 |
|
範囲によるグループ化 |
フィールドの値の範囲に基づいてクエリ結果をグループ化する集計方法です。特定の範囲内にあるフィールド値は同じグループにまとめられます。各範囲内の値の数が返されます。 |
|
地理的位置によるグループ化 |
地理的位置から中心点までの距離に基づいてクエリ結果をグループ化する集計方法です。距離が特定の範囲内にあるクエリ結果は同じグループにまとめられます。各範囲内の値の数が返されます。 |
|
フィルターによるグループ化 |
クエリ結果をフィルター処理し、グループ化して、各フィルターに一致する結果の数を取得する集計方法です。結果は、フィルターを指定した順序で返されます。 |
|
ヒストグラム |
特定のデータ区間に基づいてクエリ結果をグループ化する集計方法です。同じ範囲内にあるフィールド値は同じグループにまとめられます。各グループの値の範囲と、各グループ内の値の数が返されます。 |
|
ネスト |
前提条件
-
OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
データテーブルが作成され、データが書き込まれていること。詳細については、「データテーブルの作成」および「データ書き込み」をご参照ください。
-
データテーブルに検索インデックスが作成されていること。詳細については、「検索インデックスの作成」をご参照ください。
最小値
フィールドの最小値を返す集計方法です。この方法は、SQL の MIN 関数と同様に使用できます。
-
パラメーター
パラメーター
説明
name
集計操作の一意の名前。この名前に基づいて、特定の集計操作の結果をクエリできます。
field_name
集計操作を実行するフィールドの名前。 LONG、DOUBLE、DATE の各型のみがサポートされています。
missing
フィールド値が空の場合に、その行の集計操作に使用されるデフォルト値。
-
missing に値を指定しない場合、その行は無視されます。
-
missing に値を指定した場合、このパラメーターの値がその行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_min', 'type' => AggregationTypeConst::AGG_MIN, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
最大値
フィールドの最大値を返す集計方法です。このメソッドは、 SQL の MAX 関数と同様に使用できます。
-
パラメーター
パラメーター
説明
name
集計オペレーションの一意の名前です。この名前に基づいて、特定の集計オペレーションの結果をクエリできます。
field_name
集計オペレーションの実行に使用するフィールドの名前です。 LONG、 DOUBLE、および DATE 型のみがサポートされています。
missing
指定されたフィールドがドキュメントに存在しない場合、そのフィールドのデフォルト値として使用される値です。
-
missingの値を指定しない場合、その行は無視されます。 -
missingの値を指定した場合、その値が行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_max', 'type' => AggregationTypeConst::AGG_MAX, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Sum
数値フィールドのすべての値の合計を返す集計メソッドです。このメソッドは、SQL SUM 関数と同様に使用できます。
-
パラメーター
パラメーター
説明
name
集計オペレーションの一意の名前です。この名前に基づいて、特定の集計オペレーションの結果をクエリできます。
field_name
集計オペレーションを実行するフィールドの名前です。LONG 型と DOUBLE 型のみがサポートされています。
missing
集計対象の行で、指定フィールドの値が空の場合に適用されるデフォルト値です。
-
missing を指定しない場合、その行は無視されます。
-
missing を指定した場合、このパラメーターの値が行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_sum', 'type' => AggregationTypeConst::AGG_SUM, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
平均値
数値フィールドまたは日付フィールドのすべての値の平均を返す集計方法です。この方法は、SQL AVG 関数と同様に使用できます。
-
パラメーター
パラメーター
説明
name
集計オペレーションの一意の名前。この名前に基づいて、特定の集計オペレーションの結果をクエリできます。
field_name
集計オペレーションの実行に使用されるフィールドの名前です。 LONG、DOUBLE、DATE 型のみをサポートしています。
missing
フィールド値が空の行に対し、集計オペレーションを実行する際に使用されるデフォルト値です。
-
missing に値を指定しない場合、その行は無視されます。
-
missing に値を指定した場合、このパラメーターの値がその行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_avg', 'type' => AggregationTypeConst::AGG_AVG, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Count
指定されたフィールドの値の総数、または検索インデックス内の行の総数を返す集約方法です。このメソッドは、SQL COUNT 関数と同様に使用できます。
検索インデックス内の行の総数、またはクエリ条件を満たす行の総数をクエリするには、次のメソッドを使用できます。
-
集約のカウント機能を使用し、リクエストで count(*) を指定します。
-
クエリ機能を使用して、クエリ条件を満たす行数を取得します。クエリで setGetTotalCount を true に設定します。MatchAllQuery を使用して、検索インデックス内の行の総数を取得します。
カラム名を count 式の値として使用して、検索インデックス内でそのカラムを含む行数をクエリできます。このメソッドは、スパースカラムを含むシナリオに適しています。
-
パラメーター
パラメーター
説明
name
集約操作の一意の名前です。この名前に基づいて、特定の集約操作の結果をクエリできます。
field_name
集約操作の実行に使用するフィールドの名前です。LONG、DOUBLE、BOOLEAN、KEYWORD、GEO_POINT、および DATE 型のみがサポートされています。
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_count', 'type' => AggregationTypeConst::AGG_COUNT, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
個別カウント
フィールドに含まれる個別値の数を返す集計方法です。この方法は、SQL の COUNT (DISTINCT) 関数と同様に使用できます。
個別値の数は概算値です。
-
集計対象の総行数が 10,000 未満の場合、計算結果は正確な値に近くなります。
-
集計対象の総行数が 1 億以上の場合、エラー率は約 2% になります。
-
パラメーター
パラメーター
説明
name
集約操作の一意の名前。この名前に基づいて、特定の集約操作の結果をクエリできます。
field_name
集約操作を実行するフィールドの名前。LONG、DOUBLE、ブール型、KEYWORD、GEO_POINT、DATE 型のみがサポートされています。
missing
フィールド値が空の場合に、その行の集約に使用されるデフォルト値。
-
missing に値を指定しない場合、その行は無視されます。
-
missing に値を指定した場合、このパラメーターの値がその行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_distinct_count', 'type' => AggregationTypeConst::AGG_DISTINCT_COUNT, 'body' => array( 'field_name' => 'boolean', 'missing' => false ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
パーセンタイル統計
パーセンタイル値は、データセット内における値の相対的な位置を示します。たとえば、システムの日常的な運用保守で各リクエストの応答時間に関する統計を収集する場合は、p25、p50、p90、p99 などのパーセンタイルを使用して、応答時間の分布を分析する必要があります。
結果の精度を高めるには、p1 や p99 などの極端なパーセンタイル値を指定することを推奨します。p50 などの値ではなく極端なパーセンタイル値を使用すると、結果の精度がより高くなります。
-
パラメーター
パラメーター
説明
name
集計オペレーションの一意の名前です。この名前に基づいて、特定の集計オペレーションの結果をクエリできます。
field_name
集計オペレーションに使用するフィールドの名前です。LONG、DOUBLE、および DATE 型のみがサポートされています。
percentiles
パーセンタイルを表す数値 (0~100) の配列です。1 つ以上のパーセンタイルを指定できます。
missing
フィールド値が空の場合に、その行の集計に使用するデフォルト値です。
-
missing に値を指定しない場合、その行は無視されます。
-
missing に値を指定した場合、このパラメーターの値がその行のフィールド値として使用されます。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_percentiles', 'type' => AggregationTypeConst::AGG_PERCENTILES, 'body' => array( 'field_name' => 'long', 'percentiles' => array(60, 80, 100), 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
TopRows
各グループについて、特定のフィールドに基づいてソートされた上位行の統計を取得するための集計方法です。
GroupBy を使用してクエリ結果をグループ化した後、各グループ内の行をクエリできます。このメソッドは、MySQL の ANY_VALUE(field) と同様に使用できます。
-
パラメーター
パラメーター
説明
name
集計オペレーションの一意の名前です。この名前に基づいて、特定の集計オペレーションの結果をクエリできます。
limit
各グループから返す上位行の数です。
sort
各グループ内の行のソートルールです。このルールに基づいて、各グループから指定された数の上位行が返されます。
columns_to_get
取得するフィールドです。検索インデックス内のフィールドのみがサポートされています。配列、DATE、GEOPOINT、および NESTED フィールドはサポートされていません。
このパラメーターの値は、リクエスト内の columns_to_get の値と同じです。リクエストで columns_to_get のみを指定する必要があります。
説明各グループの集計結果から行をクエリする際に、検索インデックスに Nested、Geopoint、または配列フィールドが含まれている場合、返される結果にはプライマリキー情報のみが含まれます。必要なフィールドを取得するには、データテーブルをクエリする必要があります。
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'avg_top_rows', 'type' => AggregationTypeConst::AGG_TOP_ROWS, 'body' => array( 'limit' => 2, 'sort' => array( 'sorters' => array( array( 'field_sort' => array( 'field_name' => 'long', 'order' => SortOrderConst::SORT_ORDER_DESC ) ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
フィールド値によるグループ化
フィールド値に基づいてクエリ結果をグループ化する集約方法です。同じ値がまとめてグループ化されます。各グループの値と、各グループ内のアイテム数が返されます。
グループ内の値の数が非常に多い場合、計算された数が実際の数と異なることがあります。
-
パラメーター:
パラメーター
説明
name
集約オペレーションの一意の名前です。この名前に基づいて、特定の集約オペレーションの結果をクエリできます。
field_name
集約オペレーションを実行するフィールドの名前です。LONG、DOUBLE、BOOLEAN、KEYWORD、および DATE 型のみがサポートされています。
sort
グループのソートルールです。デフォルトでは、グループはグループ内のアイテム数に基づいて降順でソートされます。複数のソートルールを設定した場合、グループは設定した順序でソートされます。サポートされているパラメーター:
-
値によるアルファベット順ソート
-
値によるアルファベット逆順ソート
-
アイテム数による昇順ソート
-
アイテム数による降順ソート
-
サブアグリゲーション結果の値による昇順ソート
-
サブアグリゲーション結果の値による降順ソート
size
返されるグループ数です。デフォルト値: 10。最大値: 2000。グループ数が 2,000 を超える場合、最初の 2,000 グループのみが返されます。
sub_aggs and sub_group_bys
サブアグリゲーションオペレーションです。グルーピング結果に基づいてサブアグリゲーションオペレーションを実行できます。
-
シナリオ:
各カテゴリの製品数、および各カテゴリの製品の最高価格と最低価格をクエリします。
-
方法:
クエリ結果を製品カテゴリでグループ化して、各カテゴリの製品数を取得します。次に、2 つのサブアグリゲーションオペレーションを実行して、各カテゴリの製品の最高価格と最低価格を取得します。
-
結果の例:
-
果物: 5 個。最高価格は 2 米ドル、最低価格は 0.5 米ドルです。
-
洗面用品: 10 個。最高価格は 13 米ドル、最低価格は 0.1 米ドルです。
-
電子機器: 3 個。最高価格は 1,160 米ドル、最低価格は 310 米ドルです。
-
その他の製品: 15 個。最高価格は 130 米ドル、最低価格は 11 米ドルです。
-
-
-
例:
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_FIELD', 'type' => GroupByTypeConst::GROUP_BY_FIELD, 'body' => array( 'field_name' => 'boolean', 'size' => 3, 'min_doc_count' => 0, 'sort' => array( 'sorters' => array( array( 'group_key_sort' => array( 'order' => SortOrderConst::SORT_ORDER_DESC ), ), ) ), ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
範囲によるグループ化
フィールドの値の範囲に基づいてクエリ結果をグループ化するための集計方法です。特定の範囲内にあるフィールド値がまとめてグループ化されます。各範囲内の値の数が返されます。
-
パラメーター
パラメーター
説明
name
集計操作の一意の名前。この名前に基づいて、特定の集計操作の結果をクエリできます。
field_name
集計操作に使用するフィールドの名前。LONG 型と DOUBLE 型のみがサポートされています。
ranges[from, to)
グループ化に使用する値の範囲。
fromを含み、toを含まない半開区間を指定します。値の範囲は、 Double.MIN_VALUE から Double.MAX_VALUE まで設定できます。
sub_aggs and sub_group_bys
サブ集計操作。グループ化結果に基づいてサブ集計操作を実行できます。
たとえば、売上高と都道府県でクエリ結果をグループ化した後、指定された範囲内で売上高の割合が最も大きい都道府県を取得できます。このクエリを実行するには、
GroupByRange操作のsub_group_bysパラメーター内にGroupByField操作をネストする必要があります。 -
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_RANGE', 'type' => GroupByTypeConst::GROUP_BY_RANGE, 'body' => array( 'field_name' => 'long', 'ranges' => array( array( 'from' => 1, 'to' => 3 ), array( 'from' => 3, 'to' => 6 ), array( 'from' => 6, 'to' => 10 ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
地理的位置によるグループ化
地理的位置から中心点までの距離に基づいてクエリ結果をグループ化する集計方法です。特定の距離範囲内にあるクエリ結果がグループ化され、各範囲の値の数が返されます。
-
パラメーター
パラメーター
説明
name
集計操作の一意の名前。この名前に基づいて、特定の集計操作の結果をクエリできます。
field_name
集計操作に使用するフィールドの名前。GEOPOINT 型のみがサポートされています。
origin(lat, lon)
中心点の緯度と経度。
lat は中心点の緯度を指定します。lon は中心点の経度を指定します。
ranges[from, to)
グループ化に使用する距離の範囲。単位:メートル。from と to の値は DOUBLE 型です。
値の範囲は、Double.MIN_VALUE から開始し、Double.MAX_VALUE で終了できます。
sub_aggs and sub_group_bys
サブ集計操作。グループ化結果に基づいてサブ集計操作を実行できます。
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_GEO_DISTANCE', 'type' => GroupByTypeConst::GROUP_BY_GEO_DISTANCE, 'body' => array( 'field_name' => 'geo', 'origin' => array( 'lat' => 5, 'lon' => 6 ), 'ranges' => array( array( 'from' => 0., 'to' => 1000. ), array( 'from' => 10000., 'to' => 100000. ), array( 'from' => 100000., ), ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
フィルターによるグループ化
クエリ結果にフィルターをかけてグループ化し、各フィルターに一致する結果の数を取得する集計方法です。結果は、フィルターを指定した順序で返されます。
-
パラメーター
パラメーター
説明
name
集計操作の一意の名前です。この名前に基づいて、特定の集計操作の結果をクエリできます。
filters
クエリで使用するフィルターです。結果は、フィルターを指定した順序で返されます。
sub_aggs and sub_group_bys
サブ集計操作です。グループ化結果に基づいてサブ集計操作を実行できます。
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_FILTER', 'type' => GroupByTypeConst::GROUP_BY_FILTER, 'body' => array( 'filters' => array( array( 'query_type' => QueryTypeConst::TERM_QUERY, 'query' => array( 'field_name' => 'boolean', 'term' => false ) ), array( 'query_type' => QueryTypeConst::TERM_QUERY, 'query' => array( 'field_name' => 'boolean', 'term' => true ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
ヒストグラム
特定のデータ間隔に基づいてクエリ結果をグループ化する集計方法です。同じ範囲内にあるフィールド値を同じグループにまとめます。各グループの値の範囲と、各グループ内の値の数を返します。
-
パラメーター
パラメーター
説明
name
集計操作の一意の名前です。この名前に基づいて、特定の集計操作の結果をクエリできます。
field_name
集計操作の実行に使用するフィールドの名前です。LONG および DOUBLE タイプのみをサポートします。
interval
集計結果を取得するデータ間隔です。
field_range[min,max]
グループ数を制限するために、interval パラメーターと併用する範囲です。
数式を使用して計算された値は 2,000 を超えることはできません。min_doc_count
最小行数です。グループ内の行数が最小行数より少ない場合、そのグループの集計結果を返しません。
missing
フィールドに欠損値がある行を集計に含める場合に使用するデフォルト値です。
-
missing に値を指定しない場合、その行を無視します。
-
missing に値を指定した場合、このパラメーターの値をその行のフィールド値として使用します。
-
-
例
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_HISTOGRAM', 'type' => GroupByTypeConst::GROUP_BY_HISTOGRAM, 'body' => array( 'field_name' => 'long', 'interval' => 3, 'missing' => 0, 'min_doc_count' => 0, 'field_range' => array( 'min' => 2, 'max' => 10, ), 'sort' => array( 'sorters' => array( array( 'row_count_sort' => array( 'order' => SortOrderConst::SORT_ORDER_ASC ) ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
ネスト
ネストを使用して、グループ内でサブ集計を実行できます。たとえば、最大 2 階層までのネストされた集計を実行できます。
-
GroupBy + SubGroupBy:項目を都道府県別および市区町村別にグループ化して、各都道府県の各市区町村のデータを取得します。
-
GroupBy + SubAggregation:項目を都道府県別にグループ化し、メトリックの合計値を計算して、各都道府県のメトリックの合計値を取得します。
パフォーマンスと複雑さのバランスを取るために、ネストの階層数には制限があります。詳細については、「多次元インデックスの使用制限」をご参照ください。
$request = array(
'table_name' => 'myTableName',
'index_name' => 'myIndexName',
'search_query' => array(
'offset' => 0,
'limit' => 0,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::MATCH_ALL_QUERY
),
'group_bys' => array(
'group_bys' => array(
array(
'name' => 'group_by_GROUP_BY_FIELD',
'type' => GroupByTypeConst::GROUP_BY_FIELD,
'body' => array(
'field_name' => 'boolean',
'size' => 3,
'min_doc_count' => 0,
'sort' => array(
'sorters' => array(
array(
'group_key_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
),
),
)
),
'sub_aggs' => array(
'aggs' => array(
array(
'name' => 'groupSum',
'type' => AggregationTypeConst::AGG_SUM,
'body' => array(
'field_name' => 'long',
'missing' => 0
)
),
),
),
)
),
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
),
);
$response = $this->otsClient->search($request);
$group_by_results = $response["group_bys"]["group_by_results"];
print json_encode($group_by_results, JSON_PRETTY_PRINT);