Search 操作における limit パラメーターの最大値は、データの読み取り元によって異なります。返却したいすべての列が多次元インデックス内に格納されている場合、limit は 1000 まで設定できます。一方、いずれかの列をデータテーブルからフェッチする必要がある場合は、limit の上限は 100 となります。
ソリューション
limit を 1000 に設定できるかどうかは、次の条件に依存します。返却したいすべての列が多次元インデックス内に格納されていますか?
|
データソース |
limit の最大値 |
|
検索インデックスのみ |
1000 |
|
データテーブル(インデックスに含まれない列が存在) |
100 |
limit を 1000 に設定するには、ColumnsToGet パラメーターを設定し、返却されるすべての列が多次元インデックスから取得されるようにしてください。以下の 2 つの方法があります。
方法 1:
ColumnsToGet.columnsに、多次元インデックス内に存在する特定の属性列を指定します。方法 2:
ColumnsToGet.ReturnAllColumnsFromIndexをtrueに設定して、多次元インデックスに格納されているすべての属性列を返却します。この方法には Tablestore SDK for Java V5.6.1 以降が必要です。
既存の多次元インデックスに必要なすべての列が含まれていない場合は、既存のインデックスに不足している列を追加するか、新しいインデックスを作成する際にそれらの列を含めてください。詳細については、「多次元インデックスの作成」および「多次元インデックスのスキーマを動的に変更」をご参照ください。
コード例
以下のコード例は Tablestore SDK for Java を使用しています。どちらの方法も、返却されるすべての列が多次元インデックスから取得されることを保証することで、limit を 1000 に設定しています。他の言語の SDK でも同様のアプローチが適用されます。
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setLimit(1000);
SearchRequest searchRequest = new SearchRequest(tableName, indexName, searchQuery);
// 方法 1: 多次元インデックス内に存在する特定の属性列を返却。
ColumnsToGet columnsToGet1 = new ColumnsToGet();
columnsToGet1.setReturnAll(false);
// 多次元インデックスに格納されている列名を指定。
columnsToGet1.setColumns(Arrays.asList("field_1", "field_2", "field_3"));
searchRequest.setColumnsToGet(columnsToGet1);
// 方法 2: 多次元インデックスに格納されているすべての属性列を返却。
// Tablestore SDK for Java V5.6.1 以降が必要。
ColumnsToGet columnsToGet2 = new ColumnsToGet();
columnsToGet2.setReturnAllFromIndex(true);
searchRequest.setColumnsToGet(columnsToGet2);
SearchResponse response = client.search(searchRequest);