All Products
Search
Document Center

Tablestore:Boolean query

Last Updated:Jul 27, 2026

Boolean query pada Tablestore SDK for Java menggabungkan beberapa kondisi kueri menggunakan logika AND, OR, dan NOT, serta mengembalikan baris yang memenuhi kondisi gabungan tersebut.

Prasyarat

Instal Tablestore SDK for Java dan inisialisasi client.

Deskripsi fitur

Boolean query menggunakan BoolQuery untuk menggabungkan satu atau lebih subkueri menjadi kondisi kueri kompleks. Subkueri dapat berupa tipe Query apa pun, termasuk BoolQuery lainnya.

BoolQuery mendukung jenis klausa berikut:

  • mustQueries: Baris harus memenuhi semua subkueri. Subkueri yang sesuai berkontribusi terhadap skor relevansi. Klausa ini setara dengan operasi AND.

  • filterQueries: Baris harus memenuhi semua subkueri, tetapi subkueri yang sesuai tidak berkontribusi terhadap skor relevansi. Klausa ini juga setara dengan operasi AND.

  • shouldQueries: Baris harus memenuhi minimal jumlah subkueri yang ditentukan oleh minShouldMatch. Semakin banyak subkueri yang sesuai, semakin tinggi skor relevansinya. Klausa ini setara dengan operasi OR.

  • mustNotQueries: Baris tidak boleh memenuhi subkueri mana pun. Klausa ini setara dengan operasi NOT dan tidak berkontribusi terhadap skor relevansi.

Jika minShouldMatch tidak dikonfigurasi dan Boolean query hanya berisi shouldQueries serta mustNotQueries, maka minimal satu subkueri shouldQueries harus sesuai. Namun, jika Boolean query juga mencakup mustQueries atau filterQueries pada level yang sama, subkueri shouldQueries bersifat opsional secara default.

Panggil metode search untuk menjalankan Boolean query.

SearchResponse search(SearchRequest request)

Contoh berikut mengkueri baris di mana nilai city sama dengan hangzhou dan nilai category sama dengan book. Kueri ini mengembalikan maksimal 10 baris beserta jumlah total kecocokan.

String tableName = "example_table";
String indexName = "example_index";
TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);
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.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 umum kueri.

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

routingValues (optional)

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.

Name

Type

Description

query (required)

Query

Kondisi kueri. Atur parameter ini ke objek BoolQuery untuk Boolean query.

offset (optional)

Integer

Posisi awal kueri.

limit (optional)

Integer

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

highlight (optional)

Highlight

Pengaturan ringkasan dan penyorotan saat subkueri sesuai dengan bidang Text. Untuk detail konfigurasi, lihat Summary and highlighting.

collapse (optional)

Collapse

Pengaturan collapse bidang, yang menghapus duplikat hasil berdasarkan bidang tertentu. 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 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 performa kueri.

filter (optional)

SearchFilter

Filter yang diterapkan pada hasil query.

aggregationList (optional)

List<Aggregation>

Pengaturan agregasi. Untuk detail konfigurasi, lihat Aggregation.

groupByList (optional)

List<GroupBy>

Pengaturan pengelompokan. Untuk detail konfigurasi, lihat Aggregation.

token (optional)

byte[]

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

Kondisi Boolean query

request.searchQuery.query adalah objek BoolQuery yang berisi parameter berikut.

Name

Type

Description

mustQueries (optional)

List<Query>

Subkueri yang semuanya harus sesuai dengan baris. Subkueri yang sesuai berkontribusi terhadap skor relevansi. Jenis klausa ini setara dengan AND.

filterQueries (optional)

List<Query>

Subkueri yang semuanya harus sesuai dengan baris. Subkueri yang sesuai tidak berkontribusi terhadap skor relevansi. Jenis klausa ini setara dengan AND.

shouldQueries (optional)

List<Query>

Subkueri yang jumlah minimum tertentu harus sesuai. Jenis klausa ini setara dengan OR. Semakin banyak subkueri yang sesuai, semakin tinggi skor relevansinya.

mustNotQueries (optional)

List<Query>

Subkueri yang tidak boleh ada yang sesuai. Jenis klausa ini setara dengan NOT dan tidak berkontribusi terhadap skor relevansi.

minShouldMatch (optional)

String atau int

Jumlah minimum subkueri shouldQueries yang harus sesuai. Tentukan bilangan bulat, seperti 2, atau string persentase, seperti "75%". Jika parameter ini dihilangkan, nilai default-nya adalah 0 ketika mustQueries atau filterQueries ada pada level yang sama. Dalam kasus lain yang berisi shouldQueries, nilai default-nya adalah 1.

weight (optional)

Float

Bobot Boolean query. Jika parameter ini dihilangkan, kueri menggunakan bobot 1.0. Nilai yang lebih besar meningkatkan kontribusi mustQueries dan shouldQueries terhadap skor relevansi akhir tanpa mengubah baris mana yang sesuai.

Catatan

setMinimumShouldMatch(Integer) sudah tidak digunakan lagi. Gunakan setMinShouldMatch(int) atau setMinShouldMatch(String).

Kolom yang dikembalikan

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

Name

Type

Description

columns (optional)

List<String>

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

returnAll (optional)

boolean

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

returnAllFromIndex (optional)

boolean

Menentukan apakah akan mengembalikan semua kolom atribut yang diindeks. Nilai default-nya adalah false. Jangan atur returnAll dan returnAllFromIndex keduanya ke true.

Nilai kembalian

Respons pencarian

Metode search mengembalikan objek SearchResponse. Tabel berikut menjelaskan bidang intinya.

Name

Type

Description

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 hit kueri. Panggil getSearchHits() untuk mendapatkan nilainya. Baca skor relevansi serta hasil ringkasan dan penyorotan dari bidang ini.

nextToken

byte[]

Token halaman berikutnya. Panggil getNextToken() untuk mendapatkan nilainya. Jika nilainya bukan null, atur sebagai token dalam permintaan berikutnya untuk melanjutkan pembacaan 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 aktual baris yang cocok.

Search hit

response.searchHits[] adalah array objek SearchHit yang berisi bidang inti berikut.

Name

Type

Description

row

Row

Baris yang cocok. Panggil getRow() untuk mendapatkan nilainya.

score

Double

Skor relevansi. Panggil getScore() untuk mendapatkan nilainya. Saat Anda menggunakan ScoreSort untuk mengurutkan berdasarkan skor relevansi, bidang ini berisi skor aktual.

highlightResultItem

HighlightResultItem

Hasil ringkasan dan penyorotan. Panggil getHighlightResultItem() untuk mendapatkan nilainya.

Contoh skenario

Sesuai dengan salah satu kondisi

Gunakan shouldQueries untuk menggabungkan kondisi dan minShouldMatch untuk menentukan jumlah minimum kondisi yang harus dipenuhi. Contoh berikut mengkueri baris di mana nilai city sama dengan hangzhou atau nilai category sama dengan book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(cityQuery, categoryQuery));
boolQuery.setMinShouldMatch(1);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Mengecualikan baris yang sesuai dengan suatu kondisi

Gunakan mustNotQueries untuk mengecualikan baris yang memenuhi kondisi tertentu. Contoh berikut mengkueri baris di mana nilai city tidak sama dengan hangzhou.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Memfilter berdasarkan beberapa kondisi tanpa skor relevansi

Gunakan filterQueries untuk mewajibkan semua subkueri terpenuhi tanpa memengaruhi skor relevansi. Contoh berikut mengkueri baris di mana nilai city sama dengan hangzhou dan nilai category sama dengan book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setFilterQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Menggabungkan kondisi bertingkat

Gunakan BoolQuery sebagai subkueri dalam BoolQuery lain untuk menyatakan logika multi-level. Contoh berikut mengimplementasikan ekspresi (city = "hangzhou" OR price < 150) OR (category = "book" AND (price = 300 OR price = 400)).

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

RangeQuery lowPriceQuery = new RangeQuery();
lowPriceQuery.setFieldName("price");
lowPriceQuery.lessThan(ColumnValue.fromLong(150));

BoolQuery firstGroup = new BoolQuery();
firstGroup.setShouldQueries(Arrays.asList(cityQuery, lowPriceQuery));

TermQuery price300Query = new TermQuery();
price300Query.setFieldName("price");
price300Query.setTerm(ColumnValue.fromLong(300));

TermQuery price400Query = new TermQuery();
price400Query.setFieldName("price");
price400Query.setTerm(ColumnValue.fromLong(400));

BoolQuery priceGroup = new BoolQuery();
priceGroup.setShouldQueries(Arrays.asList(price300Query, price400Query));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery secondGroup = new BoolQuery();
secondGroup.setMustQueries(Arrays.asList(categoryQuery, priceGroup));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(firstGroup, secondGroup));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);