Filter pasca-kueri (Filter) adalah fitur Tablestore Search Index yang menerapkan filter tambahan pada hasil kueri. Fitur ini memungkinkan Anda mengontrol secara manual Pengoptimal kueri internal dan memaksa kondisi kueri tertentu dijalankan pada tahap akhir. Penggunaan fitur ini secara tepat dapat meningkatkan performa kueri secara signifikan.
Untuk menggunakan fitur ini, hubungi dukungan teknis Tablestore untuk mengaktifkannya.
Arsitektur fitur
Filter pasca-kueri didasarkan pada arsitektur kueri berlapis:
SearchRequest: Kontainer tingkat atas untuk sebuah kueri. Berisi nama tabel, nama indeks, dan konfigurasi kueri spesifik.
SearchQuery: Konfigurasi kueri inti, mencakup kondisi kueri utama (Query) dan filter kueri opsional (SearchFilter).
Query: Kondisi kueri utama. Mendukung semua tipe kueri dan tipe data Search Index serta digunakan untuk pengambilan data awal.
SearchFilter: Filter sekunder. Berisi kondisi filter untuk penyaringan detail halus terhadap hasil kueri utama.
Batasan
Filter pasca-kueri harus digunakan bersama kueri search index. Tipe kueri yang didukung adalah TermQuery, TermsQuery, RangeQuery, ExistsQuery, dan BoolQuery.
Untuk BoolQuery, klausa mustQueries, mustNotQueries, dan shouldQueries didukung, tetapi klausa filterQueries tidak didukung.
Penyaringan hanya didukung untuk bidang bertipe Keyword, Long, dan Double yang memiliki properti enableSortAndAgg diaktifkan.
Filter pasca-kueri tidak mendukung pengaturan Bobot.
Prasyarat
Buat search index untuk tabel data.
Deskripsi metode
func (tableStoreClient *TableStoreClient) Search(request *SearchRequest) (*SearchResponse, error)Kode contoh
Contoh ini menunjukkan cara menggunakan filter pasca-kueri. Kueri utama mencocokkan data di mana bidang col_keyword bernilai "value", lalu menerapkan kondisi filter untuk memilih catatan di mana nilai bidang col_long berada dalam rentang antara 1 dan 10.
func queryFilterExample(client *tablestore.TableStoreClient) {
// [Wajib] Ganti dengan nama tabel Anda.
tableName := "<TABLE_NAME>"
// [Wajib] Ganti dengan nama search index Anda.
indexName := "<SEARCH_INDEX_NAME>"
// Buat kueri utama: TermsQuery untuk pencocokan eksak.
termsQuery := &search.TermsQuery{
FieldName: "col_keyword",
Terms: []interface{}{"value"},
}
// Buat kondisi filter: RangeQuery di mana nilai bidang col_long berada dalam rentang (1, 10).
rangeQuery := &search.RangeQuery{
FieldName: "col_long",
From: int64(1), // Mengecualikan 1.
To: int64(10), // Mengecualikan 10.
// Untuk menyertakan batas, atur secara eksplisit IncludeLower/IncludeUpper. Nilai default di Go SDK adalah true.
// Metode setFrom/setTo di Java SDK secara default mengecualikan batas, dan perilaku Go SDK konsisten dengannya.
}
// Susun filter.
searchFilter := &search.SearchFilter{
Query: rangeQuery,
}
// Gabungkan menjadi SearchQuery lengkap.
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(termsQuery)
searchQuery.SetSearchFilter(searchFilter)
// Buat permintaan.
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
searchRequest.SetSearchQuery(searchQuery)
// Atur kolom yang akan dikembalikan: kembalikan semua kolom dari search index.
columnsToGet := &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
}
searchRequest.SetColumnsToGet(columnsToGet)
resp, err := client.Search(searchRequest)
if err != nil {
log.Printf("Kueri gagal: %v", err)
return
}
for _, row := range resp.Rows {
fmt.Printf("Baris: %+v\n", row.PrimaryKey)
}
}Anda dapat mengonfigurasi kueri untuk mengembalikan kolom tertentu atau semua kolom.
columnsToGet := &tablestore.ColumnsToGet{ // Tentukan kolom. Columns: []string{"col_long", "col_keyword"}, // Atau, kembalikan semua kolom. //ReturnAll: true, } searchRequest.SetColumnsToGet(columnsToGet)Untuk menghitung jumlah total baris yang sesuai, Anda dapat mengaktifkan fitur totalCount lalu mengambil jumlah tersebut dari respons.
// Aktifkan totalCount di searchQuery. searchQuery.SetGetTotalCount(true) // Cetak jumlah total baris yang sesuai dari respons. fmt.Printf("Jumlah Total (sesuai): %d\n", resp.TotalCount)