このトピックでは、Tablestore SDK for Java を使用して検索インデックスの範囲クエリを実行する方法について説明します。範囲条件を指定して、範囲内にあるデータをクエリできます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
query | クエリタイプ。このパラメーターを
|
sort | ソート方法。詳細については、ソートとページングの実行を参照してください。 |
getTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値: false。false の値は、クエリ条件を満たす行の総数が返されないことを指定します。 このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
columnsToGet | クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAll フィールドと columns フィールドを設定できます。 returnAll フィールドのデフォルト値は false で、クエリ条件を満たす各行のすべての列が返されないことを指定します。columns フィールドを使用して、返す列を指定できます。columns フィールドを使用して返す列を指定しない場合、プライマリキー列のみが返されます。 returnAll フィールドを true に設定すると、クエリ条件を満たす各行のすべての列が返されます。 |
例
private static void rangeQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
RangeQuery rangeQuery = new RangeQuery(); // クエリタイプを RangeQuery に設定します。
/**
* 例 1: Col_Long 列の値が 3 より大きい行をクエリします。
*/
rangeQuery.setFieldName("Col_Long");
rangeQuery.greaterThan(ColumnValue.fromLong(3));
/**
* //例 2: Col_Date_String 列の値が 2020-01-01 10:55:12 以上 2021-03-03 08:20:50 未満の行をクエリします。
* //Col_Date_String 列のタイプは、データテーブルでは String、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_String 列の値は yyyy-MM-dd HH:mm:ss 形式です。
* rangeQuery.setFieldName("Col_Date_String");
* rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2020-01-01 10:55:12"));
* rangeQuery.lessThan(ColumnValue.fromString("2021-03-03 08:20:50"));
*/
/**
* //例 3: Col_Date_Long 列の値が 1731036722 より大きい行をクエリします。
* //Col_Date_Long 列のタイプは、データテーブルでは Integer、データテーブルがマッピングされている検索インデックスでは Date です。検索インデックスの Col_Date_Long 列の値は秒単位のタイムスタンプです。
* rangeQuery.setFieldName("Col_Date_Long");
* rangeQuery.greaterThan(ColumnValue.fromLong(1731036722));
*/
searchQuery.setQuery(rangeQuery);
searchQuery.setGetTotalCount(true); // クエリ条件を満たす行の総数を返すように指定します。
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
//columnsToGet パラメーターを設定して、特定の列またはすべての列を返すように指定します。 columnsToGet パラメーターを設定しない場合、プライマリキー列のみが返されます。
//SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
// すべての列を返すように指定します。
//columnsToGet.setReturnAll(true);
// 特定の列を返すように指定します。
//columnsToGet.setColumns(Arrays.asList("ColName1","ColName2"));
//searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
//System.out.println("TotalCount: " + resp.getTotalCount());// 返された行数ではなく、一致する行の総数を表示します。
System.out.println("Row: " + resp.getRows());
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、KNN ベクタークエリ、ブールクエリ、ネストされたクエリ、存在クエリ。検索インデックスを作成した後、検索インデックスで提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングの実行を参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
テーブル内のデータを分析する場合、Search 操作を呼び出して集計機能を使用するか、SQL クエリ機能を使用できます。たとえば、最大値と最小値、値の合計、行数をクエリできます。詳細については、集計とSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。