Kueri match pada Tablestore SDK for Java mencari bidang Text atau Keyword, lalu mengembalikan baris yang memenuhi kondisi pencocokan beserta skor relevansinya.
Prasyarat
Instal Tablestore SDK for Java dan inisialisasi klien.
Deskripsi fitur
Kueri match mencari bidang Text atau Keyword. Untuk informasi mengenai tipe bidang tersebut, lihat String types. Kedua tipe bidang ini menerapkan perilaku pencocokan yang berbeda:
Text: Nilai bidang dan teks kueri dianalisis menggunakan analyzer yang dikonfigurasi saat indeks pencarian dibuat. Jika tidak ada analyzer yang dikonfigurasi, tokenisasi kata tunggal digunakan secara default. OperatorORyang digunakan secara default akan mencocokkan nilai bidang yang mengandung salah satu token kueri. Anda dapat menggunakan operatorANDuntuk mewajibkan semua token kueri cocok, atau menentukan jumlah minimum token yang harus cocok.Keyword: Baik nilai bidang maupun teks kueri tidak dianalisis. Suatu baris hanya cocok jika nilai bidang lengkapnya sama persis dengan teks kueri.
Kueri match tidak mensyaratkan token yang cocok berdekatan atau dalam urutan yang sama seperti teks kueri. Untuk mencocokkan token dalam urutan tertentu, gunakan match phrase query. Jika bidang Text menggunakan fuzzy analyzer dan Anda memerlukan pencarian fuzzy berkinerja tinggi, kueri match phrase juga direkomendasikan.
Contoh berikut melakukan kueri terhadap baris yang bidang description-nya mengandung token tablestore atau durable, serta mengembalikan hingga 10 baris, jumlah total baris yang cocok, dan skor relevansi.
String tableName = "example_table";
String indexName = "example_index";
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
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);
for (SearchHit hit : response.getSearchHits()) {
System.out.println(hit.getRow());
System.out.println(hit.getScore());
}
Parameter
Permintaan pencarian
request adalah objek SearchRequest yang berisi parameter berikut.
|
Name |
Type |
Description |
|
tableName (required) |
String |
Nama tabel. |
|
indexName (required) |
String |
Nama indeks pencarian. |
|
searchQuery (required) |
SearchQuery |
Kondisi kueri dan pengaturan kueri umum. |
|
columnsToGet (optional) |
SearchRequest.ColumnsToGet |
Pengaturan kolom yang dikembalikan. Jika Anda menghilangkan parameter ini, hanya kolom kunci primer yang dikembalikan. |
|
timeoutInMillisecond (optional) |
int |
Timeout kueri tingkat permintaan dalam milidetik. Nilai default-nya adalah |
|
routingValues (optional) |
|
Nilai kunci primer untuk bidang routing kustom. Hilangkan parameter ini jika indeks tidak menggunakan routing kustom. |
Pengaturan kueri
request.searchQuery adalah objek SearchQuery yang berisi parameter berikut.
|
Name |
Type |
Description |
|
query (required) |
Query |
Kondisi kueri. Atur parameter ini ke |
|
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 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 |
|
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 match
request.searchQuery.query adalah objek MatchQuery yang berisi parameter berikut.
|
Name |
Type |
Description |
|
fieldName (required) |
String |
Nama bidang indeks |
|
text (required) |
String |
Teks kueri. Untuk bidang |
|
operator (optional) |
QueryOperator |
Operator yang digunakan untuk menggabungkan token kueri. |
|
minShouldMatch (optional) |
String atau int |
Jumlah minimum token kueri yang harus cocok ketika |
|
weight (optional) |
float |
Bobot kueri. Nilai default-nya adalah |
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) |
|
Kolom atribut yang dikembalikan. Atur parameter ini hanya jika |
|
returnAll (optional) |
boolean |
Menentukan apakah semua kolom atribut dalam tabel dikembalikan. Nilai default-nya adalah |
|
returnAllFromIndex (optional) |
boolean |
Menentukan apakah semua kolom atribut yang diindeks dikembalikan. Nilai default-nya adalah |
Nilai kembalian
Respons kueri
Metode search mengembalikan objek SearchResponse. Tabel berikut menjelaskan bidang utamanya.
|
Name |
Type |
Description |
|
totalCount |
long |
Jumlah baris yang cocok. Panggil |
|
rows |
|
Baris yang dikembalikan dalam respons saat ini. Panggil |
|
searchHits |
|
Hasil kueri. Panggil |
|
nextToken |
byte[] |
Token halaman berikutnya. Panggil |
|
isAllSuccess |
boolean |
Menunjukkan apakah semua partisi indeks berhasil dikueri. Panggil |
Hasil kueri
response.searchHits[] adalah objek SearchHit yang berisi bidang utama berikut.
|
Name |
Type |
Description |
|
row |
Row |
Baris yang cocok. Panggil |
|
score |
Double |
Skor relevansi. Panggil |
|
highlightResultItem |
HighlightResultItem |
Hasil ringkasan dan penyorotan. Panggil |
Contoh
Mencocokkan semua token kueri
Atur operator ke AND agar suatu baris hanya cocok jika nilai bidangnya mengandung semua token kueri.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
matchQuery.setOperator(QueryOperator.AND);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
Menetapkan jumlah minimum token yang cocok
Saat operator OR digunakan, atur minShouldMatch untuk menentukan jumlah minimum token kueri yang harus cocok. Contoh berikut mewajibkan minimal dua token yang cocok.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable cloud");
matchQuery.setOperator(QueryOperator.OR);
matchQuery.setMinShouldMatch(2);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);