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

Tablestore:Range query

最終更新日:Jul 27, 2026

Tablestore SDK for Java を使用した多次元インデックスの範囲クエリは、フィールド値の上限と下限によってデータをフィルター処理し、各境界を含めるか除外するかを指定できます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

機能の説明

範囲クエリは、インデックスフィールドの値が指定された間隔内にある行に一致します。下限のみ、上限のみ、または両方の境界を設定できます。少なくとも 1 つの境界が必要です。Text フィールドの場合、フィールド値から生成されたいずれかのトークンが間隔内にあると、行が一致します。

greaterThan、greaterThanOrEqual、lessThan、および lessThanOrEqual を使用して、より大きい、以上、より小さい、および以下の条件を指定します。search を呼び出すときに、クエリタイプを RangeQuery に設定します。

SearchResponse search(SearchRequest request)

次の例では、price フィールド内の Long 型の値で、半開区間 [100, 500) に含まれるものをクエリします。このクエリは最大 10 行を返し、一致した行の総数を取得します。

String tableName = "example_table";
String indexName = "example_index";

RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("price");
rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(100L));
rangeQuery.lessThan(ColumnValue.fromLong(500L));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());

パラメーター

検索リクエスト

request は、次のパラメーターを含む SearchRequest オブジェクトです。

名前

型

説明

tableName (必須)

String

データテーブルの名前。

indexName (必須)

String

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

searchQuery (必須)

SearchQuery

クエリ条件と一般的なクエリ設定。

columnsToGet (オプション)

SearchRequest.ColumnsToGet

返す列。このパラメーターが構成されていない場合、プライマリキー列のみが返されます。

timeoutInMillisecond (オプション)

int

リクエストレベルのクエリタイムアウト (ミリ秒単位)。デフォルト値は -1 で、個別のクエリタイムアウトは構成されません。

routingValues (オプション)

List<PrimaryKey>

カスタムルーティングフィールドに対応するプライマリキー値。カスタムルーティングが構成されていない場合は、このパラメーターを設定しないでください。

クエリ設定

request.searchQuery は、次のパラメーターを含む SearchQuery オブジェクトです。

名前

型

説明

query (必須)

Query

クエリ条件。範囲クエリの場合、このパラメーターを RangeQuery オブジェクトに設定します。

offset (オプション)

Integer

クエリの開始位置。

limit (オプション)

Integer

返す行の最大数。行を返さないようにするには、このパラメーターを 0 に設定します。

highlight (オプション)

Highlight

Text フィールドのまとめとハイライトの設定。構成の詳細については、「まとめとハイライト」をご参照ください。

collapse (オプション)

Collapse

フィールドの折りたたみの設定。指定したフィールドで結果を重複排除します。構成の詳細については、「クエリ結果の折りたたみ」をご参照ください。

sort (オプション)

Sort

結果のソート順。構成の詳細については、「結果のソートとページ分割」をご参照ください。

trackTotalCount (オプション)

int

カウントする一致行の予想最大数。デフォルト値は TRACK_TOTAL_COUNT_DISABLED で、カウントを無効にします。すべての一致行をカウントするには、このパラメーターを TRACK_TOTAL_COUNT に設定します。値を小さくすると、クエリのパフォーマンスが向上します。

filter (オプション)

SearchFilter

query の結果に適用されるフィルター。

aggregationList (オプション)

List<Aggregation>

集約設定。構成の詳細については、「集約」をご参照ください。

groupByList (オプション)

List<GroupBy>

グループ化設定。構成の詳細については、「集約」をご参照ください。

token (オプション)

byte[]

ページネーショントークン。前の応答の nextToken 値にこのパラメーターを設定して、行の読み取りを続行します。token を設定すると、トークンにはすでにソート条件が含まれているため、SDK は sort をクリアします。

クエリ条件

request.searchQuery.query は、次のパラメーターを含む RangeQuery オブジェクトです。

名前

型

説明

fieldName (必須)

String

クエリ対象のインデックスフィールドの名前。範囲クエリは、Long、Double、Boolean、Keyword、Text、Date、IP フィールド、および JSON Object フィールドのサブフィールドをサポートします。Text フィールドの場合、いずれかのトークンが間隔内にあれば、行が一致します。

from (オプション)

ColumnValue

下限。from と to の少なくとも一方が必須です。greaterThan または greaterThanOrEqual を呼び出して、下限とそれを含めるかどうかを設定します。

to (オプション)

ColumnValue

上限。from と to の少なくとも一方が必須です。lessThan または lessThanOrEqual を呼び出して、上限とそれを含めるかどうかを設定します。

includeLower (オプション)

boolean

from を含めるかどうかを指定します。デフォルト値は false です。greaterThan はこのパラメーターを false に設定し、greaterThanOrEqual は true に設定します。

includeUpper (オプション)

boolean

to を含めるかどうかを指定します。デフォルト値は false です。lessThan はこのパラメーターを false に設定し、lessThanOrEqual は true に設定します。

返される列

request.columnsToGet は、次のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。

名前

型

説明

columns (オプション)

List<String>

返す属性列。このパラメーターは、returnAll と returnAllFromIndex の両方が false の場合にのみ設定します。このパラメーターを省略した場合、プライマリキー列のみが返されます。

returnAll (オプション)

boolean

データテーブルからすべての属性列を返すかどうかを指定します。デフォルト値は false です。

returnAllFromIndex (オプション)

boolean

インデックス付けされたすべての属性列を返すかどうかを指定します。デフォルト値は false です。returnAll と returnAllFromIndex の両方を true に設定しないでください。

戻り値

search は SearchResponse オブジェクトを返します。次の表に、コアフィールドを示します。

名前

型

説明

totalCount

long

一致した行の数。getTotalCount() を呼び出して値を取得します。返される値は trackTotalCount の設定によって異なります。

rows

List<Row>

このクエリによって返された行。getRows() を呼び出して値を取得します。行数は limit を超えません。

searchHits

List<SearchHit>

クエリヒット。getSearchHits() を呼び出して値を取得します。highlight が構成されている場合、このフィールドには行データと、まとめおよびハイライトの結果が含まれます。

nextToken

byte[]

次のページのトークン。getNextToken() を呼び出して値を取得します。値が null でない場合は、次のリクエストで token として設定し、行の読み取りを続行します。

isAllSuccess

boolean

すべてのインデックスパーティションが正常にクエリされたかどうかを示します。isAllSuccess() を呼び出して値を取得します。値が false の場合、応答には部分的な結果が含まれ、totalCount は実際の一致行数より少なくなる可能性があります。

シナリオ例

カスタムフォーマットの日付のクエリ

データテーブルの date_string が String フィールドで、多次元インデックスの Date フィールドに yyyy-MM-dd HH:mm:ss フォーマットでマッピングされている場合、クエリの境界として同じフォーマットの文字列を使用します。次の例では、間隔 [2021-01-01 00:00:00, 2023-01-01 00:00:00) をクエリします。

RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_string");
rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2021-01-01 00:00:00"));
rangeQuery.lessThan(ColumnValue.fromString("2023-01-01 00:00:00"));

エポック秒タイムスタンプのクエリ

データテーブルの date_epoch が Integer フィールドで、多次元インデックスの Date フィールドに epoch_second フォーマットでマッピングされている場合、クエリの境界としてエポック秒タイムスタンプを使用します。次の例では、1609459200 より大きい値をクエリします。

RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_epoch");
rangeQuery.greaterThan(ColumnValue.fromLong(1609459200L));