使用 Tablestore Go SDK 按圓形、長方形或多邊形地理範圍查詢 Geo-point 欄位。
前提條件
安裝Tablestore Go SDK並初始化用戶端。
功能說明
地理位置查詢用於匹配 Geo-point 欄位處於指定空間範圍內的資料,支援地理距離、地理長方形範圍和地理多邊形範圍三種查詢方式。三種方式的座標均使用 緯度,經度 格式,緯度範圍為 [-90,+90],經度範圍為 [-180,+180],例如 35.8,-45.91。
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
地理距離查詢
地理距離查詢以一個座標為圓心,匹配與圓心距離不超過指定值的資料。
tableName := "example_table"
indexName := "example_index"
query := &search.GeoDistanceQuery{FieldName: "location", CenterPoint: "30.25,120.16", DistanceInMeter: 50000}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
地理長方形範圍查詢
地理長方形範圍查詢使用左上方和右下角座標定義查詢範圍。
tableName := "example_table"
indexName := "example_index"
query := &search.GeoBoundingBoxQuery{FieldName: "location", TopLeft: "32,119", BottomRight: "29,122"}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
地理多邊形範圍查詢
地理多邊形範圍查詢使用多個座標點依次串連形成查詢範圍。
tableName := "example_table"
indexName := "example_index"
query := &search.GeoPolygonQuery{FieldName: "location", Points: []string{"29,119", "32,119", "32,122", "29,122"}}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
參數說明
查詢請求
|
名稱 |
類型 |
說明 |
|
TableName(必選) |
string |
資料表名稱。 |
|
IndexName(必選) |
string |
多元索引名稱。 |
|
SearchQuery(必選) |
search.SearchQuery |
查詢條件和通用查詢配置。 |
|
ColumnsToGet(可選) |
*tablestore.ColumnsToGet |
返回列配置。未設定時只返回主鍵列。 |
|
RoutingValues(可選) |
[]*tablestore.PrimaryKey |
自訂路由欄位對應的主索引值列表。未配置自訂路由時無需設定。 |
|
TimeoutMs(可選) |
*int32 |
請求級逾時時間,單位為毫秒。 |
查詢配置
|
名稱 |
類型 |
說明 |
|
SetQuery(必選) |
search.Query |
設定查詢條件。 |
|
SetOffset(可選) |
int32 |
設定本次查詢的起始位置,預設值為 0。使用 Offset 翻頁時,Offset + Limit 不能超過 100000。 |
|
SetLimit(可選) |
int32 |
設定本次查詢返回的最大行數,預設值為 10,最大值為 100。設定為 0 時不返回具體行。 |
|
SetCollapse(可選) |
*search.Collapse |
設定結果摺疊。配置方法請參見摺疊(去重)。 |
|
SetSort(可選) |
*search.Sort |
設定返回結果的排序方式。配置方法請參見排序和翻頁。 |
|
SetGetTotalCount(可選) |
bool |
是否統計匹配總行數,預設值為 false。 |
|
SetToken(可選) |
[]byte |
設定上一次響應返回的 NextToken,以繼續讀取後續資料。調用該方法會清除 Sort,因為 Token 已包含上一頁的排序條件。使用 Token 翻頁時不能設定 Offset。 |
|
SetSearchFilter(可選) |
*search.SearchFilter |
對查詢結果執行後過濾。配置方法請參見查詢後過濾。 |
|
Aggregation(可選) |
...search.Aggregation |
設定統計彙總。配置方法請參見統計彙總。 |
|
GroupBy(可選) |
...search.GroupBy |
設定分組。配置方法請參見統計彙總。 |
地理距離查詢條件
|
名稱 |
類型 |
說明 |
|
FieldName(必選) |
string |
Geo-point 欄位名稱。 |
|
CenterPoint(必選) |
string |
圓心座標,格式為 |
|
DistanceInMeter(必選) |
float64 |
查詢半徑,單位為米。 |
地理長方形範圍查詢條件
|
名稱 |
類型 |
說明 |
|
FieldName(必選) |
string |
Geo-point 欄位名稱。 |
|
TopLeft(必選) |
string |
左上方座標。 |
|
BottomRight(必選) |
string |
右下角座標。 |
地理多邊形範圍查詢條件
|
名稱 |
類型 |
說明 |
|
FieldName(必選) |
string |
Geo-point 欄位名稱。 |
|
Points(必選) |
[]string |
按順序組成多邊形的座標點列表。 |
返回列
|
名稱 |
類型 |
說明 |
|
Columns(可選) |
[]string |
要返回的屬性列名稱。僅 ReturnAll 和 ReturnAllFromIndex 均為 false 時生效。 |
|
ReturnAll(可選) |
bool |
是否返回資料表中的全部屬性列,預設值為 false。 |
|
ReturnAllFromIndex(可選) |
bool |
是否返回已建立索引的全部屬性列,預設值為 false。不能與 ReturnAll 同時設定為 true。 |
傳回值
|
名稱 |
類型 |
說明 |
|
TotalCount |
int64 |
匹配總行數。傳回值取決於 SetGetTotalCount 配置。 |
|
Rows |
[]*tablestore.Row |
本次查詢返回的行資料,數量不超過 SetLimit 指定的值。 |
|
SearchHits |
[]*tablestore.SearchHit |
查詢命中結果。配置摘要與高亮、嵌套 InnerHits 或需要相關性評分時,從該欄位讀取結果。 |
|
NextToken |
[]byte |
下一頁憑證。值非空時,將其傳入下一次查詢繼續讀取。 |
|
IsAllSuccess |
bool |
是否已成功查詢全部索引分割區。值為 false 時返回的是部分結果,TotalCount 可能小於實際匹配行數。 |
|
AggregationResults |
search.AggregationResults |
統計彙總結果。 |
|
GroupByResults |
search.GroupByResults |
分組結果。 |