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 (必須) |
|
データテーブルの名前。 |
|
index_name (必須) |
|
多次元インデックスの名前。 |
|
search_query (必須) |
|
検索条件と共通のクエリ設定。 |
|
columns_to_get (任意) |
|
返される列の設定。このパラメーターが指定されていない場合、プライマリキー列のみが返されます。 |
|
routing_keys (任意) |
|
カスタムルーティングフィールドのプライマリキー値。カスタムルーティングが設定されていない場合、このパラメーターは不要です。 |
|
timeout_s (任意) |
|
リクエストタイムアウト (秒単位)。このパラメーターが指定されていない場合、クライアントレベルのタイムアウトが使用されます。 |
クエリ設定
search_query は SearchQuery 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
query (必須) |
|
検索条件。このパラメーターを |
|
sort (任意) |
|
結果のソート順。詳細については、「結果のソートとページネーション」をご参照ください。 |
|
get_total_count (任意) |
|
一致する行の総数を返すかどうかを指定します。デフォルト値: |
|
next_token (任意) |
|
ページネーショントークン。前のレスポンスから |
|
offset (任意) |
|
クエリを開始するオフセット。浅いページネーションにこのパラメーターを使用します。 |
|
limit (任意) |
|
返される行の最大数。このパラメーターを |
|
aggs (任意) |
|
メトリック集約の設定。詳細については、「集約」をご参照ください。 |
|
group_bys (任意) |
|
グループ化の設定。詳細については、「集約」をご参照ください。 |
|
collapse_field (任意) |
|
結果の折りたたみの設定。詳細については、「クエリ結果の折りたたみ」をご参照ください。 |
|
highlight (任意) |
|
|
ブールクエリ条件
search_query.query は BoolQuery 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
must_queries (任意) |
|
すべてが一致する必要がある子クエリ。一致した子クエリは関連度スコアに影響します。 |
|
filter_queries (任意) |
|
すべてが一致する必要があるが、関連度スコアには影響しない子クエリ。 |
|
should_queries (任意) |
|
指定された最小数が一致する必要がある子クエリ。より多くの条件に一致すると、関連度スコアが高くなります。 |
|
must_not_queries (任意) |
|
一致してはならない子クエリ。関連度スコアには影響しません。 |
|
minimum_should_match (任意) |
|
一致する必要がある |
|
weight (任意) |
|
クエリの重み。正の浮動小数点数である必要があります。デフォルト値: |
返される列
columns_to_get は ColumnsToGet 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
column_names (任意) |
|
返される属性列の名前。このパラメーターは、 |
|
return_type (任意) |
|
返される列のモード。 |
レスポンス
search メソッドは SearchResponse を返します。次の表で、主要なフィールドについて説明します。
|
フィールド |
型 |
説明 |
|
rows |
|
クエリによって返された行。行数は |
|
next_token |
|
次のページのトークン。空の値は、これ以上データがないことを示します。 |
|
total_count |
|
一致する行の数。値は |
|
is_all_succeed |
|
すべてのインデックスパーティションがクエリされたかどうかを示します。値が |
|
agg_results |
|
メトリック集約の結果。このフィールドは |
|
group_by_results |
|
グループ化の結果。このフィールドは |
|
search_hits |
|
行、関連度スコア、ハイライトなどの拡張情報を含む検索ヒット。 |
タプル互換のレスポンス
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)