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

Tablestore:折りたたみ(重複排除)

最終更新日:Dec 28, 2024

クエリの結果に特定の種類の大量のデータが含まれている場合、折りたたみ(重複排除)機能を使用して、指定した列に基づいて結果セットを折りたたむことができます。特定の種類のデータは、結果の種類の多様性を確保するために、クエリ結果に一度だけ表示されます。

ほとんどのシナリオでは、折りたたみ(重複排除)機能を使用して、折りたたまれた列に基づいて個別の値を取得できます。ただし、この機能は、値がINTEGER、FLOATING-POINT、またはKEYWORDタイプの列に対してのみサポートされています。上位100,000件の結果のみが返されます。

使用上の注意

  • 折りたたみ(重複排除)機能を使用する場合、offsetパラメーターとlimitパラメーターを指定することによってのみページネーションを実行できます。

  • 結果セットを集計し、同時に折りたたむ場合、結果セットは折りたたまれる前に集計されます。

  • クエリの結果を折りたたむ場合、返される結果の総数は、offsetパラメーターとlimitパラメーターの値の合計によって決まります。最大100,000件の結果を返すことができます。

  • レスポンスの行の総数は、折りたたみ(重複排除)機能を使用する前にクエリ条件を満たす行の数を示します。結果セットが折りたたまれた後、個別の値の総数をクエリすることはできません。

API操作

折りたたみ操作の検索パラメーターを設定して、折りたたみ(重複排除)機能を実装できます。

パラメーター

パラメーター

説明

query

クエリタイプ。このパラメーターは任意のクエリタイプに設定できます。

collapse

fieldNameフィールドで指定された列に基づいて結果セットを折りたたみます。

fieldName:結果セットの折りたたみの基準となる列の名前。値がINTEGER、FLOATING-POINT、またはKEYWORDタイプの列のみがサポートされています。

offset

現在のクエリが開始される位置。

limit

現在のクエリで返される最大行数。

特定のデータなしでクエリ条件を満たす行数のみをクエリするには、limitパラメーターを0に設定します。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されません。

このパラメーターをtrueに設定すると、クエリのパフォーマンスが低下します。

tableName

データテーブルの名前。

indexName

検索インデックスの名前。

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAllフィールドとcolumnsフィールドを指定できます。

returnAllフィールドのデフォルト値はfalseで、すべての列が返されないことを指定します。この場合、columnsフィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。

returnAllフィールドをtrueに設定すると、すべての列が返されます。

メソッド

Tablestore CLIまたはTablestore SDKを使用して、データクエリの結果を折りたたむことができます。折りたたみ(重複排除)機能を使用する前に、次の前提条件が満たされていることを確認してください。

Tablestore CLIを使用する

Tablestore CLIでsearchコマンドを実行して、検索インデックスを使用してデータをクエリし、Collapseパラメーターを設定して折りたたみ(重複排除)機能を実装できます。詳細については、検索インデックスを参照してください。

  1. searchコマンドを実行して、search_index検索インデックスを使用してデータをクエリし、クエリ条件を満たす各行のすべてのインデックス付き列を返します。

    search -n search_index --return_all_indexed
  2. 次のサンプルコードは、システムのプロンプトに従ってクエリ条件を入力する方法を示しています。

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": {
            "FieldName": "product_name" // product_name列に基づいて結果セットを折りたたみます。
        },
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "MatchQuery",
            "Query": {
                "FieldName": "user_id",
                "Text": "00002", // user_id列の値が00002と一致する行を照会します。
                "MinimumShouldMatch": 1
            }
        }
    }

Tablestore SDKを使用する

Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、およびTablestore SDK for PHPを使用して、データクエリの結果を折りたたむことができます。次の例では、Tablestore SDK for Javaを使用して、折りたたみ(重複排除)機能の実装方法を説明します。

次のサンプルコードは、user_id列の値が「00002」と一致する行をクエリし、product_name列の値に基づいて結果セットを折りたたむ方法の例を示しています。

private static void UseCollapse(SyncClient client){
    SearchQuery searchQuery = new SearchQuery(); // クエリ条件を指定します。
    MatchQuery matchQuery = new MatchQuery();
    matchQuery.setFieldName("user_id");
    matchQuery.setText("00002");

    searchQuery.setQuery(matchQuery);
    Collapse collapse = new Collapse("product_name"); // product_name列に基づいて結果セットを折りたたみます。
    searchQuery.setCollapse(collapse);

    //searchQuery.setOffset(1000);// 現在のクエリが開始される位置。
    searchQuery.setLimit(20);
    //searchQuery.setGetTotalCount(true);// GetTotalCountパラメーターをtrueに設定して、クエリ条件を満たす行の総数を返します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);// データテーブルの名前と検索インデックスの名前を指定します。    
    // columnsToGetパラメーターを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメーターを指定しない場合は、主キー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // ReturnAllパラメーターをtrueに設定して、すべての列を返します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse response = client.search(searchRequest);  
    //System.out.println(response.getTotalCount());    
    //System.out.println(response.getRows().size()); // product_name列に基づいて返される行の数を表示します。
    System.out.println(response.getRows()); // product_name列に基づいて返される製品名を表示します。
}

課金ルール

検索インデックスを使用してデータをクエリする場合、読み取りスループットが消費されます。詳細については、検索インデックスの課金対象項目を参照してください。

折りたたみ(重複排除)機能は、既存の課金ルールには影響しません。

FAQ

参考資料