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

Tablestore:ブールクエリ

最終更新日:Aug 07, 2026

Tablestore SDK for Python を使用して、AND、OR、NOT ロジックで複数の検索条件を組み合わせます。

前提条件

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

概要

ブールクエリは BoolQuery を使用して、複数の子クエリを複雑な条件に組み合わせます。子クエリには、任意のクエリタイプまたは別の BoolQuery を使用できます。must_queries と filter_queries は AND を、should_queries は OR を、must_not_queries は NOT を表します。filter_queries と must_not_queries は関連度スコアに影響しません。

minimum_should_match が指定されていない場合、同じレベルに must_queries または filter_queries が存在するとき、should_queries はオプションです。それ以外で should_queries を含む場合は、デフォルトで少なくとも 1 つの should_queries の子クエリが一致する必要があります。

BoolQuery(
    must_queries=None,
    must_not_queries=None,
    filter_queries=None,
    should_queries=None,
    minimum_should_match=None,
    weight=None,
)

次の例では、city が hangzhou で、category が book である行をクエリします。

query = BoolQuery(
    must_queries=[
        TermQuery("city", "hangzhou"),
        TermQuery("category", "book"),
    ]
)
response = client.search(
    "example_table",
    "example_index",
    SearchQuery(query, limit=10, get_total_count=True),
    ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)

パラメーター

検索リクエスト

search メソッドには、次のパラメーターが含まれます。

名前

型

説明

table_name (必須)

str

データテーブルの名前。

index_name (必須)

str

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

search_query (必須)

SearchQuery

検索条件と共通のクエリ設定。

columns_to_get (任意)

ColumnsToGet

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

routing_keys (任意)

list

カスタムルーティングフィールドのプライマリキー値。カスタムルーティングが設定されていない場合、このパラメーターは不要です。

timeout_s (任意)

int

リクエストタイムアウト (秒単位)。このパラメーターが指定されていない場合、クライアントレベルのタイムアウトが使用されます。

クエリ設定

search_query は SearchQuery 型で、次のパラメーターが含まれます。

名前

型

説明

query (必須)

Query

検索条件。このパラメーターを BoolQuery に設定します。

sort (任意)

Sort

結果のソート順。詳細については、「結果のソートとページネーション」をご参照ください。

get_total_count (任意)

bool

一致する行の総数を返すかどうかを指定します。デフォルト値: False。このパラメーターを True に設定すると、クエリのオーバーヘッドが増加します。

next_token (任意)

bytes

ページネーショントークン。前のレスポンスから next_token を渡して、次のページを取得します。

offset (任意)

int

クエリを開始するオフセット。浅いページネーションにこのパラメーターを使用します。

limit (任意)

int

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

aggs (任意)

list[Agg]

メトリック集約の設定。詳細については、「集約」をご参照ください。

group_bys (任意)

list[BaseGroupBy]

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

collapse_field (任意)

Collapse

結果の折りたたみの設定。詳細については、「クエリ結果の折りたたみ」をご参照ください。

highlight (任意)

Highlight

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

ブールクエリ条件

search_query.query は BoolQuery 型で、次のパラメーターが含まれます。

名前

型

説明

must_queries (任意)

list[Query]

すべてが一致する必要がある子クエリ。一致した子クエリは関連度スコアに影響します。

filter_queries (任意)

list[Query]

すべてが一致する必要があるが、関連度スコアには影響しない子クエリ。

should_queries (任意)

list[Query]

指定された最小数が一致する必要がある子クエリ。より多くの条件に一致すると、関連度スコアが高くなります。

must_not_queries (任意)

list[Query]

一致してはならない子クエリ。関連度スコアには影響しません。

minimum_should_match (任意)

int

一致する必要がある should_queries の子クエリの最小数。

weight (任意)

float

クエリの重み。正の浮動小数点数である必要があります。デフォルト値: 1.0。このパラメーターは一致には影響しませんが、関連度スコアに影響します。

返される列

columns_to_get は ColumnsToGet 型で、次のパラメーターが含まれます。

名前

型

説明

column_names (任意)

list[str]

返される属性列の名前。このパラメーターは、return_type が SPECIFIED の場合にのみ指定します。

return_type (任意)

ColumnReturnType

返される列のモード。NONE (デフォルト) はプライマリキー列のみを返します。SPECIFIED は指定された属性列を返します。ALL はテーブル内のすべての属性列を返します。ALL_FROM_INDEX はインデックス内のすべての格納されたフィールドを返します。

レスポンス

search メソッドは SearchResponse を返します。次の表で、主要なフィールドについて説明します。

フィールド

型

説明

rows

list[Row]

クエリによって返された行。行数は limit を超えません。

next_token

bytes

次のページのトークン。空の値は、これ以上データがないことを示します。

total_count

int

一致する行の数。値は get_total_count に依存します。

is_all_succeed

bool

すべてのインデックスパーティションがクエリされたかどうかを示します。値が False の場合、部分的な結果が返されます。

agg_results

list[AggResult]

メトリック集約の結果。このフィールドは aggs が設定されていない場合は空です。

group_by_results

list[GroupByResult]

グループ化の結果。このフィールドは group_bys が設定されていない場合は空です。

search_hits

list[SearchHit]

行、関連度スコア、ハイライトなどの拡張情報を含む検索ヒット。

タプル互換のレスポンス

Tablestore SDK for Python 5.2.0 以降、検索 API はタプルの代わりにレスポンスオブジェクトを返します。バージョン 5.1.0 以前はタプルを直接返していました。バージョン 5.2.1 以降では、SearchResponse.v1_response() を呼び出すことで、以前のバージョンと互換性のあるタプルを取得できます。新しいコードでは、将来レスポンスフィールドが拡張された場合にアンパックエラーを回避するために、SearchResponse の属性に直接アクセスしてください。

(
    rows,
    next_token,
    total_count,
    is_all_succeed,
    agg_results,
    group_by_results,
    search_hits,
) = response.v1_response()

例

OR、NOT、およびフィルター条件の組み合わせ

次の例では、book- カテゴリに属し、Python と Java のカテゴリの少なくとも 1 つに一致し、かつ deprecated ステータスを持たない行を検索します。

query = BoolQuery(
    filter_queries=[PrefixQuery("category", "book-")],
    should_queries=[
        TermQuery("category", "book-python"),
        TermQuery("category", "book-java"),
    ],
    must_not_queries=[TermQuery("status", "deprecated")],
    minimum_should_match=1,
)
response = client.search(
    "example_table",
    "example_index",
    SearchQuery(query, limit=10),
)
print(response.rows)