Tablestore SDK for Python を使用して、検索インデックス内の Object または Nested JSON フィールドの子フィールドをクエリします。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化しておく必要があります。
ターゲットフィールドは、検索インデックス内で Object フィールドまたは Nested JSON フィールドとして設定されます。詳細については、「検索インデックスの作成」をご参照ください。
説明
JSON クエリには専用のクエリタイプがありません。検索インデックス内の JSON フィールドの json_type に基づいて、クエリ方法を選択します。
|
JSON タイプ |
説明 |
|
Object |
配列内で子オブジェクトの境界を保持しません。子フィールドの型と照合要件に適したクエリタイプを直接使用し、子フィールドの完全なパスを指定します。異なる条件は、異なる子オブジェクトによって満たされることがあります。 |
|
Nested |
配列内の各子オブジェクトを独立した子行として扱い、フィールド間の関係を保持します。子クエリを |
例えば、address 配列に {"country":"China","city":"hangzhou"} と {"country":"usa","city":"Seattle"} が含まれているとします。country=China と city=Seattle の両方を満たすクエリは、フィールドが Object の場合は行に一致しますが、フィールドが Nested の場合は一致しません。
JSON フィールドの子フィールドを Vector フィールドにすることはできません。
Object フィールドのクエリ
profile.name が alice であり、profile.score が 80 以上の行をクエリします。
query = BoolQuery(
must_queries=[
TermQuery("profile.name", "alice"),
RangeQuery("profile.score", range_from=80),
]
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
print(response.rows)
Nested フィールドのクエリ
次の例では、address 内の同一の子オブジェクトが、address.country が China であり、かつ address.city が Seattle であることを要件とします。その他の設定については、「Nested クエリ」をご参照ください。
child_query = BoolQuery(
must_queries=[
TermQuery("address.country", "China"),
TermQuery("address.city", "Seattle"),
]
)
query = NestedQuery("address", child_query)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
)
print(response.rows)
パラメータ
検索リクエスト
search メソッドには、次のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
table_name (必須) |
|
データテーブルの名前。 |
|
index_name (必須) |
|
検索インデックスの名前。 |
|
search_query (必須) |
|
クエリ条件と共通のクエリ設定。 |
|
columns_to_get (任意) |
|
返される列の設定。このパラメータを指定しない場合、プライマリキー列のみが返されます。 |
|
routing_keys (任意) |
|
カスタムルーティングフィールドのプライマリキー値。カスタムルーティングを設定していない場合、このパラメータは不要です。 |
|
timeout_s (任意) |
|
リクエストのタイムアウト (秒) 。このパラメータを指定しない場合、クライアントレベルのタイムアウトが使用されます。 |
クエリ設定
search_query は SearchQuery 型で、次のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
query (必須) |
|
Object フィールドの場合は子フィールドの型に適したクエリを指定します。Nested フィールドの場合は |
|
sort (任意) |
|
結果のソート順。詳細については、「結果のソートとページネーション」をご参照ください。 |
|
get_total_count (任意) |
|
一致した行の総数を返すかどうかを指定します。デフォルト値: |
|
next_token (任意) |
|
ページネーショントークン。前回のレスポンスの |
|
offset (任意) |
|
クエリを開始するオフセット。簡易的なページネーションに使用します。 |
|
limit (任意) |
|
返す行の最大数。このパラメータを |
|
aggs (任意) |
|
メトリック集約の設定。詳細については、「集約」をご参照ください。 |
|
group_bys (任意) |
|
グループ化の設定。詳細については、「集約」をご参照ください。 |
|
collapse_field (任意) |
|
結果の折りたたみ設定。詳細については、「クエリ結果の折りたたみ」をご参照ください。 |
|
highlight (任意) |
|
|
返される列
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()