Tablestore SDK for Python を使用して、指定したフィールドに基づいて多次元インデックスの結果を折りたたみ、一意のフィールド値ごとに 1 行を返します。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化してください。
説明
折りたたみは、指定された多次元インデックスのフィールドによって一致する行をグループ化し、一意のフィールド値ごとに代表的な行を 1 行返します。クエリのソート順によって、各グループからどの行が返されるかが決まります。詳細については、「結果のソートとページネーション」をご参照ください。折りたたみはクエリ結果のみを変更し、テーブルは変更しません。
折りたたみフィールドは、ソートと集約が有効化された非配列の Keyword、Long、または Double フィールドである必要があります。折りたたみクエリは、limit と offset を使用したページネーションのみをサポートし、next_token はサポートしていません。limit + offset の合計は 100000 を超えることはできません。集約、グループ化、および一致する行の総数は、折りたたみ前の結果に基づきます。レスポンスでは、折りたたまれたグループの総数は提供されません。
次の例では、category によって結果を折りたたみ、price の降順でソートします。したがって、各カテゴリで最も価格の高い行が返されます。
query = MatchAllQuery()
search_query = SearchQuery(
query,
sort=Sort([FieldSort("price", SortOrder.DESC)]),
collapse_field=Collapse("category"),
limit=10,
get_total_count=True,
)
response = client.search(
"example_table",
"example_index",
search_query,
ColumnsToGet(
["category", "price"],
ColumnReturnType.SPECIFIED,
),
)
print(response.total_count)
print(response.rows)
パラメーター
検索リクエスト
search メソッドには、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
table_name (必須) |
|
データテーブルの名前。 |
|
index_name (必須) |
|
多次元インデックスの名前。 |
|
search_query (必須) |
|
クエリ条件と共通のクエリ設定。 |
|
columns_to_get (任意) |
|
返す列の設定。このパラメーターが指定されていない場合、プライマリキー列のみが返されます。 |
|
routing_keys (任意) |
|
カスタムルーティングフィールドのプライマリキー値。カスタムルーティングが設定されていない場合、このパラメーターは不要です。 |
|
timeout_s (任意) |
|
リクエストのタイムアウト (秒単位) 。このパラメーターが指定されていない場合、クライアントレベルのタイムアウトが使用されます。 |
クエリ設定
search_query は SearchQuery 型で、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
query (必須) |
|
クエリ条件。一致要件に基づいて Query 型を指定します。 |
|
sort (任意) |
|
結果のソート順。詳細については、「結果のソートとページネーション」をご参照ください。 |
|
get_total_count (任意) |
|
一致する行の総数を返すかどうかを指定します。デフォルト値: |
|
next_token (任意) |
|
折りたたみクエリでは、このパラメーターを指定しないでください。 |
|
offset (任意) |
|
グループの開始位置。デフォルト値: |
|
limit (任意) |
|
返す行の最大数。このパラメーターを |
|
aggs (任意) |
|
メトリック集約の設定。詳細については、「集約」をご参照ください。 |
|
group_bys (任意) |
|
グループ化の設定。詳細については、「集約」をご参照ください。 |
|
collapse_field (必須) |
|
結果の折りたたみ設定。 |
|
highlight (任意) |
|
|
折りたたみ設定
search_query.collapse_field は Collapse 型で、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
field_name (必須) |
|
折りたたみフィールドの名前。この非配列の |
返却列
columns_to_get は ColumnsToGet 型で、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
column_names (任意) |
|
返す属性列の名前。このパラメーターは、 |
|
return_type (任意) |
|
返す列のモード。 |
レスポンス
search メソッドは SearchResponse を返します。次の表では、主要なフィールドについて説明します。
|
フィールド |
型 |
説明 |
|
rows |
|
折りたたみ後の行。一意の折りたたみフィールド値ごとに最大 1 行が返されます。 |
|
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()