Gunakan filter pasca-kueri dengan Tablestore SDK untuk Java untuk memfilter lebih lanjut hasil kueri utama dan memisahkan kondisi yang dieksekusi setelah kueri utama.
Prasyarat
-
Instal Tablestore SDK untuk Java dan inisialisasi klien.
-
Gunakan Tablestore SDK untuk Java versi 5.17.5 atau yang lebih baru.
Cara kerja
Filter pasca-kueri (SearchFilter) memfilter lebih lanjut baris kandidat setelah kueri utama (query) dijalankan. Agregasi dan group-by kemudian dihitung berdasarkan hasil yang telah difilter. Dengan memisahkan kondisi yang dieksekusi setelah kueri utama, biaya evaluasi kondisi kompleks selama kueri utama dapat dikurangi. Manfaat performa aktual bergantung pada selektivitas kueri utama dan kondisi filter.
Untuk menggunakan filter pasca-kueri, panggil metode search dan konfigurasikan kueri utama serta SearchFilter secara terpisah dalam objek SearchQuery. Kueri utama mendukung semua tipe kueri yang disediakan oleh search index, sedangkan filter pasca-kueri hanya mendukung tipe kueri dan tipe bidang tertentu. Untuk informasi selengkapnya, lihat Batasan.
SearchResponse search(SearchRequest request)
Contoh berikut pertama-tama menggunakan TermsQuery untuk mengkueri baris yang nilai bidang category-nya adalah book, lalu menerapkan filter pasca-kueri untuk menyaring baris yang nilai bidang score_long-nya lebih besar dari 1 dan kurang dari 10.
String tableName = "example_table";
String indexName = "example_index";
// Konfigurasikan kueri utama.
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName("category");
termsQuery.addTerm(ColumnValue.fromString("book"));
// Konfigurasikan filter pasca-kueri.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("score_long");
rangeQuery.setFrom(ColumnValue.fromLong(1));
rangeQuery.setIncludeLower(false);
rangeQuery.setTo(ColumnValue.fromLong(10));
rangeQuery.setIncludeUpper(false);
SearchFilter searchFilter = new SearchFilter();
searchFilter.setQuery(rangeQuery);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(termsQuery);
searchQuery.setFilter(searchFilter);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAllFromIndex(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println("Total count: " + response.getTotalCount());
System.out.println("Rows: " + response.getRows());
Batasan
-
Filter pasca-kueri harus digunakan bersama kueri utama. Konfigurasikan kueri utama untuk meminimalkan jumlah baris kandidat sebelum filter pasca-kueri dijalankan. Hindari penggunaan
MatchAllQuerysebagai kueri utama kecuali Anda perlu memfilter seluruh baris dalam search index. -
Filter pasca-kueri hanya mendukung kondisi
TermQuery,TermsQuery,RangeQuery,ExistsQuery, danBoolQueryyang tersusun dari tipe kueri tersebut. -
Dalam
BoolQueryyang digunakan sebagai filter pasca-kueri, hanyamustQueries,mustNotQueries, danshouldQueriesyang didukung.filterQueriestidak didukung. -
Hanya bidang bertipe
Keyword,Long, danDoubleyang dapat difilter. PropertienableSortAndAggharus diaktifkan untuk bidang-bidang tersebut. -
Kondisi filter pasca-kueri tidak berpartisipasi dalam perhitungan skor relevansi. Menetapkan nilai
weightpada kondisi filter tidak memengaruhi skor relevansi hasil kueri.
Parameter
Permintaan pencarian
request adalah objek SearchRequest yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
tableName (wajib) |
String |
Nama tabel. |
|
indexName (wajib) |
String |
Nama search index. |
|
searchQuery (wajib) |
SearchQuery |
Kueri utama, filter pasca-kueri, dan pengaturan kueri umum. |
|
columnsToGet (opsional) |
SearchRequest.ColumnsToGet |
Kolom yang akan dikembalikan. Jika parameter ini tidak ditentukan, hanya kolom kunci primer yang dikembalikan. |
|
timeoutInMillisecond (opsional) |
int |
Timeout kueri tingkat permintaan dalam milidetik. Nilai default-nya adalah |
|
routingValues (opsional) |
|
Nilai kunci primer dari bidang routing kustom. Anda tidak perlu mengonfigurasi parameter ini jika routing kustom tidak digunakan. |
Pengaturan kueri
request.searchQuery adalah objek SearchQuery yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
query (wajib) |
Query |
Kondisi kueri utama. Tipe kueri search index didukung. |
|
filter (wajib) |
SearchFilter |
Filter pasca-kueri yang memfilter lebih lanjut baris kandidat setelah kueri utama dijalankan. |
|
offset (opsional) |
Integer |
Offset tempat kueri dimulai. |
|
limit (opsional) |
Integer |
Jumlah maksimum baris yang dikembalikan. Jika Anda mengatur parameter ini ke |
|
highlight (opsional) |
Highlight |
Pengaturan ringkasan dan penyorotan untuk bidang |
|
collapse (opsional) |
Collapse |
Pengaturan collapse bidang yang digunakan untuk menghapus duplikat hasil kueri berdasarkan suatu bidang. Untuk detail konfigurasi, lihat Collapse hasil kueri. |
|
sort (opsional) |
Sort |
Urutan pengurutan hasil kueri. Untuk detail konfigurasi, lihat Urutkan dan lakukan paginasi hasil. |
|
trackTotalCount (opsional) |
int |
Jumlah maksimum baris yang sesuai untuk dihitung. Nilai default-nya adalah |
|
aggregationList (opsional) |
|
Pengaturan agregasi. Agregasi dihitung berdasarkan hasil filter pasca-kueri. Untuk detail konfigurasi, lihat Agregasi. |
|
groupByList (opsional) |
|
Pengaturan group-by. Group-by dihitung berdasarkan hasil filter pasca-kueri. Untuk detail konfigurasi, lihat Agregasi. |
|
token (opsional) |
byte[] |
Token paginasi. Untuk membaca halaman berikutnya, atur parameter ini ke nilai |
Filter pasca-kueri
request.searchQuery.filter adalah objek SearchFilter yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
query (wajib) |
Query |
Kondisi filter. Didukung kondisi |
Kolom yang dikembalikan
request.columnsToGet adalah objek SearchRequest.ColumnsToGet yang berisi parameter berikut.
|
Nama |
Tipe |
Deskripsi |
|
columns (opsional) |
|
Kolom atribut yang dikembalikan. Konfigurasikan parameter ini hanya jika |
|
returnAll (opsional) |
boolean |
Menentukan apakah semua kolom atribut dalam tabel dikembalikan. Nilai default: |
|
returnAllFromIndex (opsional) |
boolean |
Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default: |
Respons
search mengembalikan objek SearchResponse. Tabel berikut menjelaskan bidang intinya.
|
Nama |
Tipe |
Deskripsi |
|
totalCount |
long |
Jumlah baris yang sesuai dengan filter pasca-kueri, diperoleh dengan menggunakan |
|
rows |
|
Baris yang dikembalikan oleh permintaan saat ini, diperoleh dengan menggunakan |
|
searchHits |
|
Hasil pencarian, diperoleh dengan menggunakan |
|
aggregationResults |
AggregationResults |
Hasil agregasi yang dihitung berdasarkan hasil filter pasca-kueri, diperoleh dengan menggunakan |
|
groupByResults |
GroupByResults |
Hasil group-by yang dihitung berdasarkan hasil filter pasca-kueri, diperoleh dengan menggunakan |
|
nextToken |
byte[] |
Token untuk halaman berikutnya, diperoleh dengan menggunakan |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks telah dikueri, diperoleh dengan menggunakan |