このトピックでは、Tablestore SDK for Java を使用して検索インデックスに対する操作をすばやく実行する方法について説明します。
前提条件
クライアントが初期化されていること。詳細については、「Tablestore クライアントを初期化する」をご参照ください。
以下の条件を満たすデータテーブルが作成されていること。詳細については、「データテーブルを作成する」をご参照ください。
バージョンの最大数パラメータが 1 に設定されていること。
TTL が -1 に設定されているか、データテーブルの更新が禁止されていること。
手順
ステップ 1:検索インデックスを作成する
検索インデックスを作成して、データクエリを高速化できます。検索インデックスを作成する際は、クエリ対象のフィールドを検索インデックスに追加する必要があります。ビジネス要件に基づいて、生存時間(TTL)や事前ソートなどの高度なオプションを検索インデックス用に構成することもできます。
次のサンプルコードは、データテーブルの検索インデックスを作成する方法の例を示しています。この例では、検索インデックスには、キーワード型の Col_Keyword 列と Long 型の Col_Long 列が含まれています。検索インデックスのデータは、データテーブルのプライマリキーに基づいて事前にソートされ、期限切れになることはありません。
検索インデックスとデータテーブル間のデータ型マッピングについては、「データ型」をご参照ください。
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// データテーブルの名前を指定します。
request.setTableName("sampletable");
// 検索インデックスの名前を指定します。
request.setIndexName("samplesearchindex");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// フィールドの名前と型を指定します。
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG)));
request.setIndexSchema(indexSchema);
// クライアントを呼び出して、検索インデックスを作成します。
client.createSearchIndex(request);
}ステップ 2:検索インデックスを使用してデータをクエリする
検索インデックスを使用してデータをクエリする場合は、ビジネス要件に基づいてクエリタイプを選択できます。返す列と、返されるデータのソート方法を指定できます。
次のサンプルコードは、Col_Keyword 列の値がテーブル内の「hangzhou」と完全に一致する行をクエリする方法の例を示しています。
/**
* テーブル内の Col_Keyword 列の値が「hangzhou」と完全に一致する行をクエリします。
* @param client
*/
private static void termQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
TermQuery termQuery = new TermQuery(); // クエリタイプを TermQuery に設定します。
termQuery.setFieldName("Col_Keyword"); // クエリ対象の列の名前を指定します。
termQuery.setTerm(ColumnValue.fromString("hangzhou")); // 一致させるキーワードを指定します。
searchQuery.setQuery(termQuery);
//searchQuery.setGetTotalCount(true); // GetTotalCount パラメータを true に設定して、クエリ条件を満たす行の総数を返します。
SearchRequest searchRequest = new SearchRequest("sampletable", "samplesearchindex", searchQuery);
// columnsToGet パラメータを設定して、返す列を指定するか、すべての列を返すように指定できます。このパラメータを設定しない場合は、プライマリキー列のみが返されます。
//SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
//columnsToGet.setReturnAll(true); // ReturnAll を true に設定して、すべての列を返します。
//columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Columns パラメータを設定して、返す列を指定します。
//searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
//System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示するように指定します。
System.out.println("Row: " + resp.getRows());
}