Kueri exists menggunakan Tablestore SDK for Java memfilter data berdasarkan keberadaan bidang tertentu.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi fitur
Kueri exists (ExistsQuery), juga dikenal sebagai kueri NULL atau kueri nilai null, mencocokkan baris yang memiliki bidang terindeks tertentu. Suatu bidang dianggap tidak ada jika kolom yang bersesuaian belum ditulis ke tabel data. Array kosong juga dianggap sebagai bidang array yang tidak ada.
Saat memanggil search, atur jenis kueri menjadi ExistsQuery dan tentukan nama bidangnya. Untuk mengkueri bidang induk Nested atau subbidangnya, bungkus ExistsQuery dalam NestedQuery. Untuk mencocokkan baris yang tidak memiliki bidang tertentu, tambahkan ExistsQuery ke BoolQuery.mustNotQueries.
SearchResponse search(SearchRequest request)
Contoh berikut mengkueri baris yang memiliki bidang city. Kueri ini mengembalikan hingga 10 baris serta jumlah total kecocokan.
String tableName = "example_table";
String indexName = "example_index";
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(existsQuery);
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 umum kueri. |
|
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 ke 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 |
Kondisi kueri
request.searchQuery.query adalah objek ExistsQuery yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
fieldName (wajib) |
String |
Nama bidang terindeks yang akan dikueri. |
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 akan dikembalikan. Nilai default-nya adalah |
|
returnAllFromIndex (opsional) |
boolean |
Menentukan apakah semua kolom atribut terindeks akan 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 hit kueri. Panggil |
|
nextToken |
byte[] |
Token halaman berikutnya. Panggil |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks berhasil dikueri. Panggil |
Contoh skenario
Mengkueri baris yang tidak memiliki bidang tertentu
Tambahkan ExistsQuery ke BoolQuery.mustNotQueries untuk mencocokkan baris yang tidak memiliki bidang city.
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");
BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(existsQuery));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);
Mengkueri bidang Nested
Bungkus ExistsQuery dalam NestedQuery. Untuk mengkueri bidang induk, atur fieldName ke items. Untuk mengkueri subbidang, tentukan path lengkapnya, seperti items.keyword. Contoh berikut mengkueri baris yang memiliki subbidang items.keyword.
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.keyword");
NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(existsQuery);
nestedQuery.setScoreMode(ScoreMode.None);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);