Kueri rentang pada indeks pencarian dengan Tablestore SDK for Java memfilter data berdasarkan batas bawah dan atas nilai bidang, serta memungkinkan Anda menentukan apakah masing-masing batas tersebut disertakan atau tidak.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi fitur
Kueri rentang mencocokkan baris yang nilai bidang terindeksnya berada dalam interval tertentu. Anda dapat menetapkan hanya batas bawah, hanya batas atas, atau kedua batas tersebut—namun setidaknya satu batas wajib ditentukan. Untuk bidang Text, suatu baris cocok jika salah satu token yang dihasilkan dari nilai bidang tersebut berada dalam interval tersebut.
Gunakan greaterThan, greaterThanOrEqual, lessThan, dan lessThanOrEqual untuk menentukan kondisi lebih besar dari, lebih besar dari atau sama dengan, lebih kecil dari, dan lebih kecil dari atau sama dengan. Atur jenis kueri menjadi RangeQuery saat memanggil metode search.
SearchResponse search(SearchRequest request)
Contoh berikut melakukan kueri terhadap nilai Long pada bidang price yang berada dalam interval setengah terbuka [100, 500). Kueri ini mengembalikan maksimal 10 baris dan jumlah total kecocokan.
String tableName = "example_table";
String indexName = "example_index";
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("price");
rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(100L));
rangeQuery.lessThan(ColumnValue.fromLong(500L));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
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.
|
Name |
Type |
Description |
|
tableName (required) |
String |
Nama tabel data. |
|
indexName (required) |
String |
Nama indeks pencarian. |
|
searchQuery (required) |
SearchQuery |
Kondisi kueri dan pengaturan kueri umum. |
|
columnsToGet (optional) |
SearchRequest.ColumnsToGet |
Kolom yang akan dikembalikan. Jika parameter ini tidak dikonfigurasi, hanya kolom kunci primer yang dikembalikan. |
|
timeoutInMillisecond (optional) |
int |
Timeout kueri tingkat permintaan dalam milidetik. Nilai default-nya adalah |
|
routingValues (optional) |
|
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.
|
Name |
Type |
Description |
|
query (required) |
Query |
Kondisi kueri. Atur parameter ini ke objek |
|
offset (optional) |
Integer |
Posisi awal kueri. |
|
limit (optional) |
Integer |
Jumlah maksimum baris yang dikembalikan. Atur parameter ini ke |
|
highlight (optional) |
Highlight |
Pengaturan ringkasan dan penyorotan untuk bidang |
|
collapse (optional) |
Collapse |
Pengaturan collapse hasil berdasarkan bidang tertentu untuk menghapus duplikat. Untuk detail konfigurasi, lihat Collapse query results. |
|
sort (optional) |
Sort |
Urutan pengurutan hasil. Untuk detail konfigurasi, lihat Sort and paginate results. |
|
trackTotalCount (optional) |
int |
Jumlah maksimum baris yang cocok yang diharapkan untuk dihitung. Nilai default-nya adalah |
|
filter (optional) |
SearchFilter |
Filter yang diterapkan pada hasil |
|
aggregationList (optional) |
|
Pengaturan agregasi. Untuk detail konfigurasi, lihat Aggregation. |
|
groupByList (optional) |
|
Pengaturan pengelompokan. Untuk detail konfigurasi, lihat Aggregation. |
|
token (optional) |
byte[] |
Token paginasi. Atur parameter ini ke nilai |
Kondisi kueri
request.searchQuery.query adalah objek RangeQuery yang berisi parameter berikut.
|
Name |
Type |
Description |
|
fieldName (required) |
String |
Nama bidang terindeks yang akan dikueri. Kueri rentang mendukung bidang |
|
from (optional) |
ColumnValue |
Batas bawah. Setidaknya salah satu dari |
|
to (optional) |
ColumnValue |
Batas atas. Setidaknya salah satu dari |
|
includeLower (optional) |
boolean |
Menentukan apakah |
|
includeUpper (optional) |
boolean |
Menentukan apakah |
Kolom yang dikembalikan
request.columnsToGet adalah objek SearchRequest.ColumnsToGet yang berisi parameter berikut.
|
Name |
Type |
Description |
|
columns (optional) |
|
Kolom atribut yang akan dikembalikan. Atur parameter ini hanya jika |
|
returnAll (optional) |
boolean |
Menentukan apakah semua kolom atribut dari tabel data akan dikembalikan. Nilai default-nya adalah |
|
returnAllFromIndex (optional) |
boolean |
Menentukan apakah semua kolom atribut terindeks akan dikembalikan. Nilai default-nya adalah |
Nilai kembalian
search mengembalikan objek SearchResponse. Tabel berikut menjelaskan field intinya.
|
Name |
Type |
Description |
|
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
Kueri tanggal dalam format kustom
Jika date_string adalah bidang String di tabel data dan dipetakan ke bidang Date di indeks pencarian dengan format yyyy-MM-dd HH:mm:ss, gunakan string dalam format yang sama sebagai batas kueri. Contoh berikut melakukan kueri terhadap interval [2021-01-01 00:00:00, 2023-01-01 00:00:00).
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_string");
rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2021-01-01 00:00:00"));
rangeQuery.lessThan(ColumnValue.fromString("2023-01-01 00:00:00"));
Kueri timestamp epoch-second
Jika date_epoch adalah bidang Integer di tabel data dan dipetakan ke bidang Date di indeks pencarian dengan format epoch_second, gunakan timestamp epoch-second sebagai batas kueri. Contoh berikut melakukan kueri terhadap nilai yang lebih besar dari 1609459200.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_epoch");
rangeQuery.greaterThan(ColumnValue.fromLong(1609459200L));