Tablestore SDK for Python を使用して、検索インデックスの範囲クエリを実行し、フィールド値の境界によってデータをフィルターします。各境界を含めるかどうかも制御できます。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化します。
説明
検索インデックスの範囲クエリは、フィールド値が指定された範囲内にある行に一致します。下限のみ、上限のみ、またはその両方を指定できますが、少なくとも 1 つの境界が必要です。Text フィールドの場合、1 つのトークンが範囲内にあると行が一致します。search メソッドを呼び出すときは、クエリタイプを RangeQuery に設定します。
RangeQuery(field_name, range_from=None, range_to=None, include_lower=True, include_upper=False)
次の例では、price フィールドが左閉右開区間 [100, 500) にある行をクエリし、最大 10 行と一致する行の総数を返します。
query = RangeQuery(
"price",
range_from=100,
range_to=500,
include_lower=True,
include_upper=False,
)
search_query = SearchQuery(
query,
limit=10,
get_total_count=True,
)
response = client.search(
"example_table",
"example_index",
search_query,
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.total_count)
for row in response.rows:
print(row)
パラメーター
検索リクエスト
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 は RangeQuery 型で、次のパラメーターを含みます。
|
名前 |
タイプ |
説明 |
|
field_name (必須) |
|
クエリ対象のインデックスフィールド名。範囲クエリは、 |
|
range_from (オプション) |
|
下限。 |
|
range_to (オプション) |
|
上限。 |
|
include_lower (オプション) |
|
下限値を含めるかどうかを指定します。デフォルト値は |
|
include_upper (オプション) |
|
上限を含めるかどうかを指定します。デフォルト値は |
取得する列
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()