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

Tablestore:Exists クエリ

最終更新日:Jul 27, 2026

Tablestore SDK for Java の Exists クエリを使用して、指定したフィールドが存在するかどうかに基づいてデータをフィルタリングできます。

前提条件

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

機能の説明

存在クエリ (ExistsQuery、NULL クエリまたは NULL 値クエリとも呼ばれる) は、指定されたインデックス化フィールドが存在する行に一致します。対応する列がデータテーブルに書き込まれていない場合、そのフィールドは存在しないと見なされます。空の配列も、存在しない配列フィールドとして扱われます。

search を呼び出すとき、クエリタイプを ExistsQuery に設定し、フィールド名を指定します。Nested の親フィールドまたはサブフィールドをクエリするには、ExistsQueryNestedQuery でラップします。フィールドが存在しない行に一致させるには、ExistsQueryBoolQuery.mustNotQueries に追加します。

SearchResponse search(SearchRequest request)

次の例では、city フィールドが存在する行をクエリします。このクエリは、最大 10 行と一致総数を返します。

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

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(existsQuery);
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());

パラメーター

検索リクエスト

requestSearchRequest オブジェクトであり、以下のパラメーターを含みます。

名前

説明

tableName (必須)

String

データテーブルの名前。

indexName (必須)

String

多次元インデックスの名前。

searchQuery (必須)

SearchQuery

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

columnsToGet (任意)

SearchRequest.ColumnsToGet

返すカラム。設定しない場合は、プライマリキーのカラムのみが返されます。

timeoutInMillisecond (任意)

int

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

routingValues (任意)

List<PrimaryKey>

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

クエリ設定

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

名前

説明

query (必須)

Query

クエリ条件。exists クエリには、このパラメーターを ExistsQuery オブジェクトに設定します。

offset (任意)

Integer

クエリの開始位置。

limit (任意)

Integer

返す行の最大数です。このパラメーターを 0 に設定すると、行は返されません。

collapse (任意)

Collapse

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

sort (任意)

Sort

結果のソート順序。設定の詳細については、「Sort and paginate results」をご参照ください。

trackTotalCount (任意)

int

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

filter (任意)

SearchFilter

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

aggregationList (任意)

List<Aggregation>

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

groupByList (任意)

List<GroupBy>

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

token (任意)

byte[]

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

クエリ条件

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

名前

説明

fieldName (必須)

String

クエリ対象となるインデックス付きフィールドの名前。

返されるカラム

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

名前

説明

columns (任意)

List<String>

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

returnAll (任意)

boolean

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

returnAllFromIndex (任意)

boolean

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

戻り値

searchSearchResponse オブジェクトを返します。以下の表で、コアフィールドについて説明します。

名前

説明

totalCount

long

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

rows

List<Row>

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

searchHits

List<SearchHit>

クエリがヒットします。getSearchHits()を呼び出して値を取得します。

nextToken

byte[]

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

isAllSuccess

boolean

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

シナリオ例

フィールドが存在しない行のクエリ

ExistsQueryBoolQuery.mustNotQueries に追加して、city フィールドが存在しない行に一致させます。

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(existsQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Nested フィールドのクエリ

ExistsQueryNestedQuery でラップします。親フィールドをクエリするには、fieldNameitems に設定します。サブフィールドをクエリするには、items.keyword などのフルパスを指定します。次の例では、items.keyword サブフィールドが存在する行をクエリします。

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.keyword");

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(existsQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);