Kueri geografis dengan Tablestore SDK for Java memfilter data berdasarkan jarak dari titik pusat, kotak pembatas, atau poligon.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi fitur
Kueri geografis memfilter data berdasarkan lokasi geografis dalam bidang indeks GEO_POINT. Jenis kueri berikut didukung:
-
Kueri jarak geografis (
GeoDistanceQuery): mengkueri lokasi yang jaraknya dari titik pusat tertentu kurang dari atau sama dengan nilai yang ditentukan. -
Kueri kotak pembatas geografis (
GeoBoundingBoxQuery): mengkueri lokasi di dalam kotak pembatas. Kotak pembatas didefinisikan oleh koordinat kiri atas dan kanan bawah. -
Kueri poligon geografis (
GeoPolygonQuery): mengkueri lokasi di dalam poligon. Poligon didefinisikan oleh beberapa titik koordinat.
Saat memanggil search, atur jenis kueri menjadi GeoDistanceQuery, GeoBoundingBoxQuery, atau GeoPolygonQuery sesuai dengan area geografis yang ingin dikueri.
SearchResponse search(SearchRequest request)
Contoh berikut mengkueri baris yang bidang location-nya berada dalam jarak 120.000 meter dari titik pusat 0,0. Kueri ini mengembalikan hingga 10 baris dan jumlah total kecocokan.
String tableName = "example_table";
String indexName = "example_index";
GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery();
geoDistanceQuery.setFieldName("location");
geoDistanceQuery.setCenterPoint("0,0");
geoDistanceQuery.setDistanceInMeter(120000);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoDistanceQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
Parameter
Permintaan pencarian
request adalah objek SearchRequest yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
tableName (wajib) |
String |
Nama tabel data. |
|
indexName (wajib) |
String |
Nama indeks pencarian. |
|
searchQuery (wajib) |
SearchQuery |
Kondisi kueri dan pengaturan kueri umum. |
|
columnsToGet (opsional) |
SearchRequest.ColumnsToGet |
Kolom yang akan dikembalikan. Jika parameter ini tidak dikonfigurasi, hanya kolom kunci primer yang dikembalikan. |
|
timeoutInMillisecond (opsional) |
int |
Timeout kueri tingkat permintaan dalam milidetik. Nilai default-nya adalah |
|
routingValues (opsional) |
|
Nilai kunci primer yang sesuai dengan bidang routing kustom. Biarkan parameter ini tidak diatur jika routing kustom tidak dikonfigurasi. |
Pengaturan kueri
request.searchQuery adalah objek SearchQuery yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
query (wajib) |
Query |
Kondisi kueri. Atur parameter ini menjadi objek |
|
offset (opsional) |
Integer |
Posisi awal kueri. |
|
limit (opsional) |
Integer |
Jumlah maksimum baris yang dikembalikan. Atur parameter ini ke |
|
collapse (opsional) |
Collapse |
Pengaturan collapse bidang, yang menghapus duplikat hasil berdasarkan bidang tertentu. Untuk detail konfigurasi, lihat Collapse query results. |
|
sort (opsional) |
Sort |
Urutan pengurutan hasil. Untuk detail konfigurasi, lihat Sort and paginate results. |
|
trackTotalCount (opsional) |
int |
Jumlah maksimum baris yang cocok yang diharapkan untuk dihitung. Nilai default-nya adalah |
|
filter (opsional) |
SearchFilter |
Filter yang diterapkan pada hasil |
|
aggregationList (opsional) |
|
Pengaturan agregasi. Untuk detail konfigurasi, lihat Aggregation. |
|
groupByList (opsional) |
|
Pengaturan pengelompokan. Untuk detail konfigurasi, lihat Aggregation. |
|
token (opsional) |
byte[] |
Token paginasi. Atur parameter ini ke nilai |
Untuk ketiga jenis kueri geografis, tentukan koordinat dalam format latitude,longitude, dengan lintang ditempatkan sebelum bujur. Rentang nilai lintang adalah [-90,+90] dan rentang nilai bujur adalah [-180,+180]. Contoh: 35.8,-45.91.
Kondisi jarak geografis
Untuk kueri jarak geografis, request.searchQuery.query adalah objek GeoDistanceQuery yang berisi parameter berikut.
|
Nama |
Type |
Deskripsi |
|
fieldName (wajib) |
String |
Nama bidang indeks |
|
centerPoint (wajib) |
String |
Koordinat titik pusat. |
|
distanceInMeter (wajib) |
double |
Jarak maksimum dari titik pusat, dalam meter. |
Kondisi kotak pembatas
Untuk kueri kotak pembatas geografis, request.searchQuery.query adalah objek GeoBoundingBoxQuery yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
fieldName (wajib) |
String |
Nama bidang indeks |
|
topLeft (wajib) |
String |
Koordinat sudut kiri atas kotak pembatas. |
|
bottomRight (wajib) |
String |
Koordinat sudut kanan bawah kotak pembatas. |
Kondisi poligon
Untuk kueri poligon geografis, request.searchQuery.query adalah objek GeoPolygonQuery yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
fieldName (wajib) |
String |
Nama bidang indeks |
|
points (wajib) |
|
Titik koordinat yang mendefinisikan poligon. |
Kolom yang dikembalikan
request.columnsToGet adalah objek SearchRequest.ColumnsToGet yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
columns (opsional) |
|
Kolom atribut yang dikembalikan. Atur parameter ini hanya jika |
|
returnAll (opsional) |
boolean |
Menentukan apakah semua kolom atribut dari tabel data dikembalikan. Nilai default-nya adalah |
|
returnAllFromIndex (opsional) |
boolean |
Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default-nya adalah |
Nilai kembalian
search mengembalikan objek SearchResponse. Tabel berikut menjelaskan bidang intinya.
|
Nama |
Tipe |
Deskripsi |
|
totalCount |
long |
Jumlah baris yang cocok. Panggil |
|
rows |
|
Baris yang dikembalikan oleh kueri ini. Panggil |
|
searchHits |
|
Hasil kueri. Panggil |
|
nextToken |
byte[] |
Token halaman berikutnya. Panggil |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks berhasil dikueri. Panggil |
Contoh skenario
Mengkueri data dalam kotak pembatas
Contoh berikut mengkueri baris yang bidang location-nya berada dalam kotak pembatas dengan koordinat kiri atas 2,-1 dan koordinat kanan bawah -1,2.
GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery();
geoBoundingBoxQuery.setFieldName("location");
geoBoundingBoxQuery.setTopLeft("2,-1");
geoBoundingBoxQuery.setBottomRight("-1,2");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoBoundingBoxQuery);
Mengkueri data dalam poligon
Contoh berikut mengkueri baris yang bidang location-nya berada dalam poligon yang didefinisikan oleh titik koordinat -1,-1, -1,2, 2,2, dan 2,-1.
GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();
geoPolygonQuery.setFieldName("location");
geoPolygonQuery.setPoints(
Arrays.asList("-1,-1", "-1,2", "2,2", "2,-1"));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(geoPolygonQuery);