使用 Tablestore Python SDK 的地理位置查詢可按與中心點的距離、長方形範圍或多邊形範圍篩選資料。
前提條件
安裝Tablestore Python SDK並初始化用戶端。
功能說明
地理位置查詢用於按 GeoPoint 類型索引欄位的地理位置篩選資料,支援地理距離查詢、地理長方形範圍查詢和地理多邊形範圍查詢。調用 search 方法時,根據要查詢的地理範圍,將查詢類型設定為 GeoDistanceQuery、GeoBoundingBoxQuery 或 GeoPolygonQuery。
GeoDistanceQuery(field_name, center_point, distance)
GeoBoundingBoxQuery(field_name, top_left, bottom_right)
GeoPolygonQuery(field_name, points)
以下樣本查詢 location 欄位與中心點 30.25,120.16 的距離不超過 200,000 米的資料,返回最多 10 行資料及匹配總行數。
query = GeoDistanceQuery("location", "30.25,120.16", 200000)
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(可選) |
|
結果摺疊配置,用於按指定欄位對返回結果去重。有關配置方法,請參見摺疊(去重)。 |
以下三類查詢涉及的座標均使用 緯度,經度 格式,緯度在前,經度在後。緯度範圍為 [-90,+90],經度範圍為 [-180,+180],例如 35.8,-45.91。
地理距離條件
search_query.query 的類型為 GeoDistanceQuery,包含以下參數。
|
名稱 |
類型 |
說明 |
|
field_name(必選) |
|
要查詢的 |
|
center_point(必選) |
|
查詢範圍的中心點座標。 |
|
distance(必選) |
|
與中心點的最大距離,單位為米。 |
長方形範圍條件
search_query.query 的類型為 GeoBoundingBoxQuery,包含以下參數。
|
名稱 |
類型 |
說明 |
|
field_name(必選) |
|
要查詢的 |
|
top_left(必選) |
|
長方形左上方的座標。 |
|
bottom_right(必選) |
|
長方形右下角的座標。 |
多邊形範圍條件
search_query.query 的類型為 GeoPolygonQuery,包含以下參數。
|
名稱 |
類型 |
說明 |
|
field_name(必選) |
|
要查詢的 |
|
points(必選) |
|
組成多邊形的座標列表。按多邊形邊界依次指定各座標。 |
返回列
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()
情境樣本
查詢長方形範圍內的資料
以下樣本查詢位於左上方 32.0,119.0 和右下角 29.0,122.0 所確定長方形範圍內的資料。
query = GeoBoundingBoxQuery(
"location",
"32.0,119.0",
"29.0,122.0",
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)
查詢多邊形範圍內的資料
以下樣本查詢位於四個座標點組成的多邊形範圍內的資料。
query = GeoPolygonQuery(
"location",
[
"29.0,119.0",
"32.0,119.0",
"32.0,122.0",
"29.0,122.0",
],
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10),
ColumnsToGet(return_type=ColumnReturnType.ALL),
)
print(response.rows)