Kueri geo diklasifikasikan menjadi jenis-jenis berikut: kueri jarak geo, kueri kotak pembatas geo, dan kueri poligon geo.
Prasyarat
Instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instance OTSClient.
Tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Indeks pencarian telah dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat indeks pencarian.
Kueri jarak geo
Untuk menjalankan kueri jarak geo, tentukan area geografis melingkar dengan menggunakan titik pusat dan radius. Tablestore mengembalikan baris yang nilai kolom tertentunya berada dalam area geografis melingkar tersebut.
Parameter
Parameter
Deskripsi
NamaKolom
Nama kolom yang digunakan untuk memenuhi kondisi kueri. Nilai parameter ini adalah tipe data GEOPOINT.
TitikPusat
Pasangan koordinat dari titik pusat. Pasangan koordinat terdiri dari nilai lintang dan bujur.
Nilai parameter ini harus dalam format "lintang,bujur". Nilai valid untuk lintang: [-90,90]. Nilai valid untuk bujur: [-180,180]. Contoh: “35.8,-45.91".
JarakDalamMeter
Radius area geografis melingkar. Nilai parameter ini adalah tipe data DOUBLE. Satuan: meter.
Kueri
Jenis kueri. Atur jenis kueri menjadi GeoDistanceQuery.
NamaTabel
Nama tabel data.
NamaIndeks
Nama indeks pencarian.
Contoh Kode
Berikut adalah contoh kode untuk menanyakan baris yang nilai Col_GeoPoint-nya berada dalam area geografis melingkar:
func GeoDistanceQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoDistanceQuery{} // Set the query type to GeoDistanceQuery. query.FieldName = "Col_GeoPoint" query.CenterPoint = "5,5" // Specify the coordinate pair of the central point. query.DistanceInMeter = 10000.0 // Set the radius of the circular geographical area to 10,000. Unit: meter. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
Kueri kotak pembatas geo
Untuk menjalankan kueri kotak pembatas geo, tentukan area geografis persegi panjang dengan menggunakan sudut kiri atas dan sudut kanan bawah. Tablestore mengembalikan baris yang nilai kolom tertentunya berada dalam area geografis persegi panjang tersebut.
Parameter
Parameter
Deskripsi
NamaKolom
Nama kolom yang digunakan untuk memenuhi kondisi kueri. Nilai parameter ini adalah tipe data GEOPOINT.
SudutKiriAtas
Pasangan koordinat dari sudut kiri atas area geografis persegi panjang.
SudutKananBawah
Pasangan koordinat dari sudut kanan bawah area geografis persegi panjang. Pasangan koordinat dari sudut kiri atas dan sudut kanan bawah mendefinisikan area geografis persegi panjang yang unik.
Nilai parameter ini harus dalam format "lintang,bujur". Nilai valid untuk lintang: [-90,90]. Nilai valid untuk bujur: [-180,180]. Contoh: “35.8,-45.91".
Kueri
Jenis kueri. Atur jenis kueri menjadi GeoBoundingBoxQuery.
NamaTabel
Nama tabel data.
NamaIndeks
Nama indeks pencarian.
Contoh Kode
Berikut adalah contoh kode untuk menanyakan baris yang nilai Col_GeoPoint-nya berada dalam area geografis persegi panjang dengan sudut kiri atas di '10,0' dan sudut kanan bawah di '0,10':
func GeoBoundingBoxQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoBoundingBoxQuery{} // Set the query type to GeoBoundingBoxQuery. query.FieldName = "Col_GeoPoint" // Specify the name of the column that you want to query. query.TopLeft = "10,0" // Specify the coordinate pair of the upper-left corner of the rectangular geographic area. query.BottomRight = "0,10" // Specify the coordinate pair of the lower-right corner of the rectangular geographic area. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns in the rows that meet the query conditions. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
Kueri poligon geo
Untuk menjalankan kueri poligon geo, tentukan area geografis poligon dengan menggunakan pasangan koordinat dari beberapa titik. Tablestore mengembalikan baris yang nilai kolom tertentunya berada dalam area geografis poligon tersebut.
Parameter
Parameter
Deskripsi
NamaKolom
Nama kolom yang digunakan untuk memenuhi kondisi kueri. Nilai parameter ini adalah tipe data GEOPOINT.
Titik
Pasangan koordinat dari titik-titik yang mendefinisikan area geografis poligon.
Pasangan koordinat setiap titik harus dalam format "lintang,bujur". Nilai valid untuk lintang: [-90,90]. Nilai valid untuk bujur: [-180,180]. Contoh: “35.8,-45.91".
Kueri
Jenis kueri. Atur jenis kueri menjadi GeoPolygonQuery.
NamaTabel
Nama tabel data.
NamaIndeks
Nama indeks pencarian.
Contoh Kode
Berikut adalah contoh kode untuk menanyakan baris yang nilai Col_GeoPoint-nya berada dalam area geografis poligon:
func GeoPolygonQuery(client *tablestore.TableStoreClient, tableName string, indexName string) { searchRequest := &tablestore.SearchRequest{} searchRequest.SetTableName(tableName) searchRequest.SetIndexName(indexName) query := &search.GeoPolygonQuery{} // Set the query type to GeoDistanceQuery. query.FieldName = "Col_GeoPoint" query.Points = []string{"0,0","5,5","5,0"} // Specify the coordinate pairs of the vertices of the polygon geographic area. searchQuery := search.NewSearchQuery() searchQuery.SetQuery(query) searchRequest.SetSearchQuery(searchQuery) // Return all columns in the rows that meet the query conditions. searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{ ReturnAll:true, }) searchResponse, err := client.Search(searchRequest) if err != nil { fmt.Printf("%#v", err) return } fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned. fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions instead of the number of returned rows. fmt.Println("RowCount: ", len(searchResponse.Rows)) for _, row := range searchResponse.Rows { jsonBody, err := json.Marshal(row) if err != nil { panic(err) } fmt.Println("Row: ", string(jsonBody)) } }
FAQ
Referensi
Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri multi-tepat, kueri cocok semua, kueri cocok, kueri frasa cocok, kueri awalan, kueri rentang, kueri wildcard, kueri geo, kueri Boolean, kueri vektor KNN, kueri bersarang, dan kueri eksistensi. Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk menanyakan data dari berbagai dimensi sesuai dengan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur Pengurutan dan paginasi. Untuk informasi lebih lanjut, lihat Pengurutan dan paginasi.
Anda dapat menggunakan fitur collapse (distinct) untuk menggabungkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe tertentu hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi dari operasi Search atau menjalankan pernyataan SQL. Sebagai contoh, Anda bisa mendapatkan nilai minimum dan maksimum, jumlah, serta total jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika ingin mendapatkan semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Lakukan pemindaian paralel.