All Products
Search
Document Center

Tablestore:Kueri geografis

Last Updated:Jul 27, 2026

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 -1, yang berarti tidak mengonfigurasi timeout kueri terpisah.

routingValues (opsional)

List<PrimaryKey>

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 GeoDistanceQuery, GeoBoundingBoxQuery, atau GeoPolygonQuery berdasarkan jenis kueri.

offset (opsional)

Integer

Posisi awal kueri.

limit (opsional)

Integer

Jumlah maksimum baris yang dikembalikan. Atur parameter ini ke 0 untuk tidak mengembalikan baris apa pun.

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 TRACK_TOTAL_COUNT_DISABLED, yang menonaktifkan penghitungan. Atur parameter ini ke TRACK_TOTAL_COUNT untuk menghitung semua baris yang cocok. Nilai yang lebih kecil meningkatkan kinerja kueri.

filter (opsional)

SearchFilter

Filter yang diterapkan pada hasil query.

aggregationList (opsional)

List<Aggregation>

Pengaturan agregasi. Untuk detail konfigurasi, lihat Aggregation.

groupByList (opsional)

List<GroupBy>

Pengaturan pengelompokan. Untuk detail konfigurasi, lihat Aggregation.

token (opsional)

byte[]

Token paginasi. Atur parameter ini ke nilai nextToken dari respons sebelumnya untuk melanjutkan membaca baris. Saat Anda mengatur token, SDK mengosongkan sort karena token tersebut sudah berisi kondisi pengurutan.

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 GEO_POINT yang akan dikueri.

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 GEO_POINT yang akan dikueri.

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 GEO_POINT yang akan dikueri.

points (wajib)

List<String>

Titik koordinat yang mendefinisikan poligon.

Kolom yang dikembalikan

request.columnsToGet adalah objek SearchRequest.ColumnsToGet yang berisi parameter berikut.

Nama

Tipe

Deskripsi

columns (opsional)

List<String>

Kolom atribut yang dikembalikan. Atur parameter ini hanya jika returnAll dan returnAllFromIndex keduanya false. Jika Anda mengabaikan parameter ini, hanya kolom kunci primer yang dikembalikan.

returnAll (opsional)

boolean

Menentukan apakah semua kolom atribut dari tabel data dikembalikan. Nilai default-nya adalah false.

returnAllFromIndex (opsional)

boolean

Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default-nya adalah false. Jangan mengatur returnAll dan returnAllFromIndex ke true secara bersamaan.

Nilai kembalian

search mengembalikan objek SearchResponse. Tabel berikut menjelaskan bidang intinya.

Nama

Tipe

Deskripsi

totalCount

long

Jumlah baris yang cocok. Panggil getTotalCount() untuk mendapatkan nilainya. Nilai yang dikembalikan bergantung pada pengaturan trackTotalCount.

rows

List<Row>

Baris yang dikembalikan oleh kueri ini. Panggil getRows() untuk mendapatkan nilainya. Jumlah baris tidak melebihi limit.

searchHits

List<SearchHit>

Hasil kueri. Panggil getSearchHits() untuk mendapatkan nilainya.

nextToken

byte[]

Token halaman berikutnya. Panggil getNextToken() untuk mendapatkan nilainya. Jika nilainya bukan null, atur sebagai token dalam permintaan berikutnya untuk melanjutkan membaca baris.

isAllSuccess

boolean

Menunjukkan apakah semua partisi indeks berhasil dikueri. Panggil isAllSuccess() untuk mendapatkan nilainya. Jika nilainya false, respons berisi hasil parsial dan totalCount mungkin kurang dari jumlah sebenarnya dari baris yang cocok.

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);