Kueri geo diklasifikasikan menjadi beberapa jenis: kueri jarak geo, kueri kotak pembatas geo, dan kueri poligon geo.
Prasyarat
Klien Tablestore harus diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Klien Tablestore.
Tabel data harus dibuat dan data ditulis ke dalam tabel. Untuk informasi lebih lanjut, lihat Buat Tabel Data dan Tulis Data.
Indeks pencarian harus 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 titik pusat dan radius. Tablestore akan mengembalikan baris yang nilai kolom tertentunya berada dalam area tersebut.
Parameter
Parameter
Deskripsi
fieldName
Nama kolom yang ingin Anda kueri. Nilai parameter ini adalah tipe data GEOPOINT.
centerPoint
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.distanceInMeter
Radius dari area geografis melingkar. Nilai parameter ini adalah tipe data DOUBLE. Satuan: meter.
getTotalCount
Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default dari parameter ini adalah false, yang menentukan bahwa jumlah total baris yang memenuhi kondisi kueri tidak dikembalikan.
Jika Anda mengatur parameter ini ke true, performa kueri akan terpengaruh.
query
Pernyataan kueri untuk indeks pencarian. Atur parameter ini ke GeoDistanceQuery.
tableName
Nama tabel data.
indexName
Nama indeks pencarian.
columnsToGet
Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat menentukan bidang returnAll dan columns untuk parameter ini.
Nilai default dari bidang returnAll adalah false, yang menentukan bahwa tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan bidang columns untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, hanya kolom kunci utama yang dikembalikan.
Jika Anda mengatur bidang returnAll ke true, semua kolom dikembalikan.
Contoh
Berikut adalah contoh kode untuk mengkueri baris di mana nilai kolom Col_GeoPoint berada dalam jarak tertentu dari titik pusat.
public static void geoDistanceQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // Gunakan GeoDistanceQuery. geoDistanceQuery.setFieldName("Col_GeoPoint"); geoDistanceQuery.setCenterPoint("5,5"); // Tentukan koordinat titik pusat. geoDistanceQuery.setDistanceInMeter(10000); // Atur jarak dari titik pusat ke nilai lebih besar atau sama dengan 10.000. Satuan: meter. searchQuery.setQuery(geoDistanceQuery); //searchQuery.setGetTotalCount(true); // Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // Anda dapat menggunakan parameter columnsToGet untuk menentukan kolom yang ingin Anda kembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak menentukan parameter ini, hanya kolom kunci utama yang dikembalikan. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Tentukan bahwa semua kolom dikembalikan. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Tampilkan jumlah total baris yang memenuhi kondisi kueri alih-alih jumlah baris yang dikembalikan. System.out.println("Row: " + resp.getRows()); }
Kueri kotak pembatas geo
Untuk menjalankan kueri kotak pembatas geo, tentukan area persegi panjang dengan sudut kiri atas dan sudut kanan bawah. Tablestore akan mengembalikan baris yang nilai kolom tertentunya berada dalam area tersebut.
Parameter
Parameter
Deskripsi
fieldName
Nama kolom yang ingin Anda kueri. Nilai parameter ini adalah tipe data GEOPOINT.
topLeft
Pasangan koordinat dari sudut kiri atas area geografis persegi panjang.
bottomRight
Pasangan koordinat dari sudut kanan bawah area geografis persegi panjang. Area geografis persegi panjang dapat ditentukan dengan menggunakan sudut kiri atas dan sudut kanan bawah.
Formatnya adalah
lintang,bujur. Nilai valid untuk lintang:[-90,+90]. Nilai valid untuk bujur:[-180,+180]. Contoh:35.8,-45.91.query
Pernyataan kueri untuk indeks pencarian. Atur parameter ini ke GeoBoundingBoxQuery.
getTotalCount
Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default dari parameter ini adalah false, yang menentukan bahwa jumlah total baris yang memenuhi kondisi kueri tidak dikembalikan.
Jika Anda mengatur parameter ini ke true, performa kueri akan terpengaruh.
tableName
Nama tabel data.
indexName
Nama indeks pencarian.
columnsToGet
Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat menentukan bidang returnAll dan columns untuk parameter ini.
Nilai default dari bidang returnAll adalah false, yang menentukan bahwa tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan bidang columns untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, hanya kolom kunci utama yang dikembalikan.
Jika Anda mengatur bidang returnAll ke true, semua kolom dikembalikan.
Contoh
Berikut adalah contoh kode untuk mengkueri baris di mana nilai kolom Col_GeoPoint berada dalam area persegi panjang yang didefinisikan oleh sudut kiri atas "10,0" dan sudut kanan bawah "0,10".
public static void geoBoundingBoxQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // Gunakan GeoBoundingBoxQuery. geoBoundingBoxQuery.setFieldName("Col_GeoPoint"); // Tentukan nama kolom yang ingin Anda kueri. geoBoundingBoxQuery.setTopLeft("10,0"); // Tentukan koordinat sudut kiri atas area geografis persegi panjang. geoBoundingBoxQuery.setBottomRight("0,10"); // Tentukan koordinat sudut kanan bawah area geografis persegi panjang. searchQuery.setQuery(geoBoundingBoxQuery); //searchQuery.setGetTotalCount(true); // Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // Anda dapat menggunakan parameter columnsToGet untuk menentukan kolom yang ingin Anda kembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak menentukan parameter ini, hanya kolom kunci utama yang dikembalikan. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Tentukan bahwa semua kolom dikembalikan. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Tampilkan jumlah total baris yang memenuhi kondisi kueri alih-alih jumlah baris yang dikembalikan. System.out.println("Row: " + resp.getRows()); }
Kueri poligon geo
Untuk menjalankan kueri poligon geo, tentukan area poligon dengan pasangan koordinat dari beberapa titik. Tablestore akan mengembalikan baris yang nilai kolom tertentunya berada dalam area tersebut.
Parameter
Parameter
Deskripsi
fieldName
Nama kolom yang ingin Anda kueri. Nilai parameter ini adalah tipe data GEOPOINT.
points
Pasangan koordinat dari titik-titik yang mendefinisikan area geografis poligon.
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.query
Pernyataan kueri untuk indeks pencarian. Atur parameter ini ke GeoPolygonQuery.
getTotalCount
Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default dari parameter ini adalah false, yang menentukan bahwa jumlah total baris yang memenuhi kondisi kueri tidak dikembalikan.
Jika Anda mengatur parameter ini ke true, performa kueri akan terpengaruh.
tableName
Nama tabel data.
indexName
Nama indeks pencarian.
columnsToGet
Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat menentukan bidang returnAll dan columns untuk parameter ini.
Nilai default dari bidang returnAll adalah false, yang menentukan bahwa tidak semua kolom dikembalikan. Dalam hal ini, Anda dapat menggunakan bidang columns untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan kolom yang ingin Anda kembalikan, hanya kolom kunci utama yang dikembalikan.
Jika Anda mengatur bidang returnAll ke true, semua kolom dikembalikan.
Contoh
Berikut adalah contoh kode untuk mengkueri baris di mana nilai kolom Col_GeoPoint berada dalam area poligon yang ditentukan.
public static void geoPolygonQuery(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // Gunakan GeoPolygonQuery. geoPolygonQuery.setFieldName("Col_GeoPoint"); geoPolygonQuery.setPoints(Arrays.asList("0,0","5,5","5,0")); // Tentukan koordinat titik-titik sudut dari area geografis poligon. searchQuery.setQuery(geoPolygonQuery); //searchQuery.setGetTotalCount(true); // Atur parameter GetTotalCount ke true untuk mengembalikan jumlah total baris yang memenuhi kondisi kueri. SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); // Anda dapat menggunakan parameter columnsToGet untuk menentukan kolom yang ingin Anda kembalikan atau menentukan bahwa semua kolom dikembalikan. Jika Anda tidak menentukan parameter ini, hanya kolom kunci utama yang dikembalikan. //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); //columnsToGet.setReturnAll(true); // Tentukan bahwa semua kolom dikembalikan. //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Tentukan kolom yang ingin Anda kembalikan. //searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); //System.out.println("TotalCount: " + resp.getTotalCount()); // Tampilkan jumlah total baris yang memenuhi kondisi kueri alih-alih jumlah baris yang dikembalikan. System.out.println("Row: " + resp.getRows()); }
FAQ
Referensi
Saat menggunakan indeks pencarian untuk mengkueri 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 vektor KNN, kueri Boolean, kueri bersarang, dan kueri eksistensi. Setelah membuat indeks pencarian, Anda dapat menggunakan metode kueri yang disediakan untuk mengkueri data dari berbagai dimensi sesuai kebutuhan bisnis.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri menggunakan fitur pengurutan dan paging. Untuk informasi lebih lanjut, lihat Melakukan Pengurutan dan Paging.
Gunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe yang ditentukan hanya muncul sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (Distinct).
Jika ingin menganalisis data dalam tabel, Anda dapat memanggil operasi Pencarian untuk menggunakan fitur agregasi atau kueri SQL. Misalnya, Anda dapat mengkueri nilai maksimum dan minimum, jumlah nilai, serta 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 Pemindaian Paralel.