使用 Tablestore Python SDK 可查詢多元索引中 Object 或 Nested 類型 JSON 欄位的子欄位。
前提條件
安裝Tablestore Python SDK並初始化用戶端。
多元索引已將目標欄位配置為 JSON 類型,並設定為 Object 或 Nested。有關配置方法,請參見建立多元索引。
功能說明
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。有關其他配置,請參見巢狀型別查詢。
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 |
|
查詢命中結果,包含行資料、相關性得分和高亮結果等擴充資訊。 |
相容 Tuple 返回格式
Tablestore Python SDK 5.2.0 開始將查詢介面的傳回值由 Tuple 調整為響應對象,5.1.0 及以下版本直接返回 Tuple。5.2.1 及以上版本可調用 SearchResponse.v1_response() 擷取與舊版本相容的 Tuple。新代碼建議直接存取 SearchResponse 的屬性,避免返回欄位擴充後解包數量不匹配。
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()