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

Tablestore:ブールクエリ

最終更新日:Jul 27, 2026

Tablestore SDK for Java を使用したブールクエリは、AND、OR、NOT ロジックを使用して複数のクエリ条件を組み合わせ、結合された条件に一致する行を返します。

前提条件

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

機能の説明

ブールクエリは BoolQuery を使用して、1 つ以上のサブクエリを複雑なクエリ条件に結合します。サブクエリには、別の BoolQuery を含む、任意の Query タイプを指定できます。

BoolQuery は、次の句のタイプをサポートしています。

  • mustQueries:行はすべてのサブクエリに一致する必要があります。一致するサブクエリは関連性スコアに影響します。この句のタイプは AND と同等です。

  • filterQueries:行はすべてのサブクエリに一致する必要がありますが、一致するサブクエリは関連性スコアに影響しません。この句のタイプも AND と同等です。

  • shouldQueries:行は、minShouldMatch で指定された最小数のサブクエリに一致する必要があります。より多くのサブクエリに一致すると、関連性スコアが高くなります。この句のタイプは OR と同等です。

  • mustNotQueries:行はどのサブクエリにも一致してはなりません。この句のタイプは NOT と同等であり、関連性スコアには影響しません。

minShouldMatch が設定されておらず、ブールクエリに shouldQueries と mustNotQueries のみが含まれている場合、少なくとも 1 つの shouldQueries サブクエリが一致する必要があります。ブールクエリに同じレベルの mustQueries または filterQueries が含まれている場合、shouldQueries サブクエリはデフォルトでオプションです。

search を呼び出してブールクエリを実行します。

SearchResponse search(SearchRequest request)

次の例では、city が hangzhou と等しく、category が book と等しい行をクエリします。このクエリは最大 10 行と一致する合計数を返します。

String tableName = "example_table";
String indexName = "example_index";
TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(Arrays.asList(cityQuery, categoryQuery));

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

パラメーター

検索リクエスト

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

名前

タイプ

説明

tableName (必須)

String

データテーブルの名前。

indexName (必須)

String

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

searchQuery (必須)

SearchQuery

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

columnsToGet (任意)

SearchRequest.ColumnsToGet

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

timeoutInMillisecond (任意)

int

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

routingValues (任意)

List<PrimaryKey>

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

クエリ設定

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

名前

タイプ

説明

query (必須)

Query

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

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 は、次のパラメーターを含む BoolQuery オブジェクトです。

名前

タイプ

説明

mustQueries (任意)

List<Query>

行がすべて一致する必要があるサブクエリ。一致するサブクエリは関連性スコアに影響します。この句のタイプは AND と同等です。

filterQueries (任意)

List<Query>

行がすべて一致する必要があるサブクエリ。一致するサブクエリは関連性スコアに影響しません。この句のタイプは AND と同等です。

shouldQueries (任意)

List<Query>

指定された最小数が一致する必要があるサブクエリ。この句のタイプは OR と同等です。より多くのサブクエリに一致すると、関連性スコアが高くなります。

mustNotQueries (任意)

List<Query>

いずれも一致してはならないサブクエリ。この句のタイプは NOT と同等であり、関連性スコアには影響しません。

minShouldMatch (任意)

String または int

一致する必要がある shouldQueries サブクエリの最小数。2 などの整数、または "75%" などのパーセンテージ文字列を指定します。このパラメーターを省略した場合、同じレベルに mustQueries または filterQueries が存在する場合、デフォルト値は 0 です。shouldQueries を含むその他の場合、デフォルト値は 1 です。

weight (任意)

Float

ブールクエリの重み。このパラメーターを省略した場合、クエリは 1.0 の重みを使用します。値を大きくすると、一致する行を変更することなく、最終的な関連性スコアに対する mustQueries と shouldQueries の影響が増加します。

説明

setMinimumShouldMatch(Integer) は非推奨です。setMinShouldMatch(int) または setMinShouldMatch(String) を使用してください。

返される列

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() を呼び出して値を取得します。このフィールドから関連性スコア、まとめ、ハイライトの結果を読み取ります。

nextToken

byte[]

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

isAllSuccess

boolean

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

検索ヒット

response.searchHits[] は、次のコアフィールドを含む SearchHit オブジェクトです。

名前

タイプ

説明

row

Row

一致する行。getRow() を呼び出して値を取得します。

score

Double

関連性スコア。getScore() を呼び出して値を取得します。ScoreSort を使用して関連性スコアでソートする場合、このフィールドには実際のスコアが含まれます。

highlightResultItem

HighlightResultItem

まとめとハイライトの結果。getHighlightResultItem() を呼び出して値を取得します。

シナリオ例

いずれかの条件に一致

shouldQueries を使用して条件を組み合わせ、minShouldMatch を使用して一致する必要がある条件の最小数を指定します。次の例では、city が hangzhou と等しいか、category が book と等しい行をクエリします。

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(cityQuery, categoryQuery));
boolQuery.setMinShouldMatch(1);

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

条件に一致する行を除外

mustNotQueries を使用して、指定されたいずれかの条件に一致する行を除外します。次の例では、city が hangzhou と等しくない行をクエリします。

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

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

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

関連性スコアなしで複数の条件でフィルタリング

filterQueries を使用して、条件が関連性スコアに影響を与えないようにしながら、すべてのサブクエリが一致するように要求します。次の例では、city が hangzhou と等しく、category が book と等しい行をクエリします。

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setFilterQueries(Arrays.asList(cityQuery, categoryQuery));

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

条件の組み合わせをネスト

別の BoolQuery のサブクエリとして BoolQuery を使用して、複数レベルのロジックを表現します。次の例では、(city = "hangzhou" OR price < 150) OR (category = "book" AND (price = 300 OR price = 400)) を実装します。

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

RangeQuery lowPriceQuery = new RangeQuery();
lowPriceQuery.setFieldName("price");
lowPriceQuery.lessThan(ColumnValue.fromLong(150));

BoolQuery firstGroup = new BoolQuery();
firstGroup.setShouldQueries(Arrays.asList(cityQuery, lowPriceQuery));

TermQuery price300Query = new TermQuery();
price300Query.setFieldName("price");
price300Query.setTerm(ColumnValue.fromLong(300));

TermQuery price400Query = new TermQuery();
price400Query.setFieldName("price");
price400Query.setTerm(ColumnValue.fromLong(400));

BoolQuery priceGroup = new BoolQuery();
priceGroup.setShouldQueries(Arrays.asList(price300Query, price400Query));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery secondGroup = new BoolQuery();
secondGroup.setMustQueries(Arrays.asList(categoryQuery, priceGroup));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(firstGroup, secondGroup));

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