All Products
Search
Document Center

Tablestore:Gunakan filter pasca-kueri

Last Updated:Jul 29, 2026

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 MatchAllQuery sebagai kueri utama kecuali Anda perlu memfilter seluruh baris dalam search index.

  • Filter pasca-kueri hanya mendukung kondisi TermQuery, TermsQuery, RangeQuery, ExistsQuery, dan BoolQuery yang tersusun dari tipe kueri tersebut.

  • Dalam BoolQuery yang digunakan sebagai filter pasca-kueri, hanya mustQueries, mustNotQueries, dan shouldQueries yang didukung. filterQueries tidak didukung.

  • Hanya bidang bertipe Keyword, Long, dan Double yang dapat difilter. Properti enableSortAndAgg harus diaktifkan untuk bidang-bidang tersebut.

  • Kondisi filter pasca-kueri tidak berpartisipasi dalam perhitungan skor relevansi. Menetapkan nilai weight pada 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 -1, yang berarti tidak ada timeout tingkat permintaan yang ditetapkan.

routingValues (opsional)

List<PrimaryKey>

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 0, tidak ada baris yang dikembalikan.

highlight (opsional)

Highlight

Pengaturan ringkasan dan penyorotan untuk bidang Text. Untuk detail konfigurasi, lihat Ringkasan dan penyorotan.

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 TRACK_TOTAL_COUNT_DISABLED, yang berarti baris yang sesuai tidak dihitung. Atur parameter ini ke TRACK_TOTAL_COUNT untuk menghitung semua baris yang sesuai. Nilai yang lebih kecil memberikan performa kueri yang lebih baik.

aggregationList (opsional)

List<Aggregation>

Pengaturan agregasi. Agregasi dihitung berdasarkan hasil filter pasca-kueri. Untuk detail konfigurasi, lihat Agregasi.

groupByList (opsional)

List<GroupBy>

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 nextToken yang dikembalikan oleh permintaan sebelumnya. Ketika token diatur, SDK mengosongkan sort karena token paginasi sudah berisi kondisi pengurutan.

Filter pasca-kueri

request.searchQuery.filter adalah objek SearchFilter yang berisi parameter berikut.

Nama

Tipe

Deskripsi

query (wajib)

Query

Kondisi filter. Didukung kondisi TermQuery, TermsQuery, RangeQuery, ExistsQuery, dan BoolQuery yang tersusun dari tipe kueri tersebut.

Kolom yang dikembalikan

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

Nama

Tipe

Deskripsi

columns (opsional)

List<String>

Kolom atribut yang dikembalikan. Konfigurasikan parameter ini hanya jika returnAll dan returnAllFromIndex keduanya bernilai false. Jika parameter ini tidak ditentukan, hanya kolom kunci primer yang dikembalikan.

returnAll (opsional)

boolean

Menentukan apakah semua kolom atribut dalam tabel dikembalikan. Nilai default: false.

returnAllFromIndex (opsional)

boolean

Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default: false. Parameter ini dan returnAll tidak boleh keduanya diatur ke true.

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 getTotalCount(). Nilainya bergantung pada pengaturan trackTotalCount.

rows

List<Row>

Baris yang dikembalikan oleh permintaan saat ini, diperoleh dengan menggunakan getRows(). Jumlah baris tidak melebihi limit.

searchHits

List<SearchHit>

Hasil pencarian, diperoleh dengan menggunakan getSearchHits().

aggregationResults

AggregationResults

Hasil agregasi yang dihitung berdasarkan hasil filter pasca-kueri, diperoleh dengan menggunakan getAggregationResults().

groupByResults

GroupByResults

Hasil group-by yang dihitung berdasarkan hasil filter pasca-kueri, diperoleh dengan menggunakan getGroupByResults().

nextToken

byte[]

Token untuk halaman berikutnya, diperoleh dengan menggunakan getNextToken(). Jika nilainya bukan null, gunakan nilai tersebut sebagai token dalam permintaan berikutnya.

isAllSuccess

boolean

Menunjukkan apakah semua partisi indeks telah dikueri, diperoleh dengan menggunakan isAllSuccess(). Jika nilainya false, hasil parsial dikembalikan dan totalCount mungkin kurang dari jumlah sebenarnya dari baris yang sesuai.