Gunakan wildcard query di Tablestore SDK for Go untuk mencocokkan nilai atau token dengan tanda bintang (*) dan tanda tanya (?).
Prasyarat
Instal Tablestore Go SDK dan inisialisasi klien.
Deskripsi
Wildcard query menggunakan tanda bintang (*) untuk mencocokkan nol atau lebih karakter dan tanda tanya (?) untuk mencocokkan satu karakter. Untuk bidang Text, kueri ini diterapkan pada term yang telah ditokenisasi. Pencocokan bersifat case-sensitive, dan string kueri dapat berisi hingga 32 karakter.
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
Contoh berikut melakukan kueri data dan mengembalikan hingga 10 baris serta jumlah total baris yang cocok.
tableName := "example_table"
indexName := "example_index"
query := &search.WildcardQuery{FieldName: "category", Value: "book-*"}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
Parameter
Permintaan kueri
request bertipe tablestore.SearchRequest dan berisi parameter berikut.
|
Name |
Type |
Description |
|
TableName (required) |
string |
Nama tabel data. |
|
IndexName (required) |
string |
Nama indeks pencarian. |
|
SearchQuery (required) |
search.SearchQuery |
Kondisi kueri dan konfigurasi kueri umum. |
|
ColumnsToGet (optional) |
*tablestore.ColumnsToGet |
Konfigurasi kolom yang dikembalikan. Jika parameter ini dihilangkan, hanya kolom kunci primer yang dikembalikan. |
|
RoutingValues (optional) |
[]*tablestore.PrimaryKey |
Nilai kunci primer untuk bidang routing kustom. Hilangkan parameter ini jika routing kustom tidak dikonfigurasi. |
|
TimeoutMs (optional) |
*int32 |
Periode timeout permintaan dalam milidetik. |
Konfigurasi kueri
Buat konfigurasi kueri dengan memanggil search.NewSearchQuery() dan konfigurasikan menggunakan metode berikut.
|
Name |
Type |
Description |
|
SetQuery (required) |
search.Query |
Menentukan kondisi kueri. |
|
SetOffset (optional) |
int32 |
Menentukan posisi awal. Nilai default: 0. Untuk paginasi berbasis offset, Offset + Limit tidak boleh melebihi 100.000. |
|
SetLimit (optional) |
int32 |
Menentukan jumlah maksimum baris yang dikembalikan. Nilai default: 10. Nilai maksimum: 100. Nilai 0 tidak mengembalikan baris apa pun. |
|
SetHighlight (optional) |
*search.Highlight |
Mengonfigurasi ringkasan dan penyorotan untuk bidang Text. Untuk informasi selengkapnya, lihat Summary and highlighting. |
|
SetCollapse (optional) |
*search.Collapse |
Melipat hasil kueri. Untuk informasi selengkapnya, lihat Collapse query results. |
|
SetSort (optional) |
*search.Sort |
Menentukan urutan pengurutan hasil. Untuk informasi selengkapnya, lihat Sort and paginate results. |
|
SetGetTotalCount (optional) |
bool |
Menentukan apakah akan menghitung semua baris yang cocok. Nilai default: false. |
|
SetToken (optional) |
[]byte |
Menentukan nilai NextToken yang dikembalikan oleh respons sebelumnya. Metode ini menghapus Sort karena token berisi kondisi pengurutan halaman sebelumnya. Jangan tentukan Offset saat menggunakan paginasi berbasis token. |
|
SetSearchFilter (optional) |
*search.SearchFilter |
Menerapkan filter pasca-kueri. Untuk informasi selengkapnya, lihat Use post-query filters. |
|
Aggregation (optional) |
...search.Aggregation |
Mengonfigurasi agregasi. Untuk informasi selengkapnya, lihat Aggregation. |
|
GroupBy (optional) |
...search.GroupBy |
Mengonfigurasi pengelompokan. Untuk informasi selengkapnya, lihat Aggregation. |
Kondisi kueri
Kueri bertipe search.WildcardQuery dan berisi parameter berikut.
|
Name |
Type |
Description |
|
FieldName (required) |
string |
Nama bidang indeks yang akan dikueri. |
|
Value (required) |
string |
String kueri wildcard, yang dapat berisi hingga 32 karakter. |
Kolom yang dikembalikan
request.ColumnsToGet bertipe tablestore.ColumnsToGet dan berisi parameter berikut.
|
Name |
Type |
Description |
|
Columns (optional) |
[]string |
Kolom atribut yang dikembalikan. Parameter ini hanya berlaku jika ReturnAll dan ReturnAllFromIndex keduanya bernilai false. |
|
ReturnAll (optional) |
bool |
Menentukan apakah akan mengembalikan semua kolom atribut dalam tabel data. Nilai default: false. |
|
ReturnAllFromIndex (optional) |
bool |
Menentukan apakah akan mengembalikan semua kolom atribut yang diindeks. Nilai default: false. Jangan atur parameter ini dan ReturnAll ke true secara bersamaan. |
Respons
Metode Search mengembalikan nilai tablestore.SearchResponse. Tabel berikut menjelaskan bidang bisnis inti.
|
Name |
Type |
Description |
|
TotalCount |
int64 |
Jumlah total baris yang cocok. Nilainya bergantung pada SetGetTotalCount. |
|
Rows |
[]*tablestore.Row |
Baris yang dikembalikan oleh kueri saat ini. Jumlahnya tidak melebihi nilai yang ditentukan oleh SetLimit. |
|
SearchHits |
[]*tablestore.SearchHit |
Hasil pencarian. Baca bidang ini saat Anda menggunakan penyorotan, nested inner hits, atau skor relevansi. |
|
NextToken |
[]byte |
Token untuk halaman berikutnya. Jika nilainya tidak kosong, teruskan ke kueri berikutnya. |
|
IsAllSuccess |
bool |
Menunjukkan apakah semua partisi indeks telah dikueri. Jika nilainya false, hasil parsial dikembalikan dan TotalCount mungkin kurang dari jumlah aktual baris yang cocok. |
|
AggregationResults |
search.AggregationResults |
Hasil agregasi. |
|
GroupByResults |
search.GroupByResults |
Hasil pengelompokan. |
Contoh
Tingkatkan performa kueri substring
Untuk pola kueri seperti *word*, konfigurasikan bidang Text dengan alat analisis fuzzy saat membuat indeks pencarian, lalu gunakan match phrase query untuk mengkueri bidang tersebut. Pendekatan ini biasanya lebih cepat dibandingkan wildcard query untuk mencocokkan substring. Untuk aturan dan batasan pencocokan, lihat Token-based wildcard queries.
Contoh berikut membuat indeks pencarian yang berisi bidang file_name dan mengonfigurasi alat analisis fuzzy untuk bidang tersebut.
analyzer := tablestore.Analyzer_Fuzzy
fieldSchema := &tablestore.FieldSchema{
FieldName: proto.String("file_name"),
FieldType: tablestore.FieldType_TEXT,
Index: proto.Bool(true),
Analyzer: &analyzer,
AnalyzerParameter: tablestore.FuzzyAnalyzerParameter{},
}
request := &tablestore.CreateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{fieldSchema},
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
log.Fatal(err)
}
Setelah data indeks disinkronkan, gunakan MatchPhraseQuery untuk mengkueri baris yang bidang file_name-nya berisi word di posisi mana pun.
query := &search.MatchPhraseQuery{
FieldName: "file_name",
Text: "word",
}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10)
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Rows)
Kecualikan baris yang sesuai dengan pola wildcard
Untuk menerapkan ekuivalen dari SQL NOT LIKE, tambahkan WildcardQuery ke BoolQuery.MustNotQueries.
wildcardQuery := &search.WildcardQuery{
FieldName: "category",
Value: "book-*",
}
query := &search.BoolQuery{
MustNotQueries: []search.Query{wildcardQuery},
}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10)
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Rows)