Anda dapat menggunakan kueri kecocokan (MatchQuery) untuk menanyakan data dalam tabel berdasarkan kecocokan perkiraan. Tablestore melakukan tokenisasi nilai-nilai di kolom TEXT dan kata kunci yang digunakan dalam kueri kecocokan sesuai dengan jenis analisis yang ditentukan. Dengan cara ini, Tablestore menjalankan kueri kecocokan berdasarkan token. Kami merekomendasikan penggunaan kueri frasa kecocokan untuk kolom yang menggunakan tokenisasi kabur guna memastikan performa tinggi dalam kueri kabur.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instance OTSClient.
Sebuah tabel data telah dibuat dan data telah ditulis ke tabel tersebut. Untuk informasi lebih lanjut, lihat Buat tabel data dan Tulis data.
Indeks pencarian telah dibuat untuk tabel data. Untuk informasi lebih lanjut, lihat Buat indeks pencarian.
Parameter
Parameter | Deskripsi |
NamaTabel | Nama dari tabel data. |
NamaIndeks | Nama dari indeks pencarian. |
Kueri | Jenis kueri. Atur jenis kueri ke MatchQuery. |
NamaKolom | Nama kolom yang ingin Anda cocokkan. Anda dapat melakukan kueri kecocokan pada kolom TEXT. |
Teks | Kata kunci yang digunakan untuk mencocokkan nilai kolom saat Anda melakukan kueri kecocokan. Jika kolom yang digunakan untuk kueri kecocokan adalah tipe TEXT, kata kunci akan dipecah menjadi beberapa kata kunci berdasarkan analisis yang Anda tentukan saat membuat indeks pencarian. Secara default, tokenisasi satu kata dilakukan jika Anda tidak menentukan analisis saat membuat indeks pencarian. Sebagai contoh, jika kolom yang ingin Anda cocokkan adalah kolom TEXT, Anda mengatur tipe analisis ke tokenisasi satu kata, dan Anda menggunakan "this is" sebagai kata kunci pencarian, Anda bisa mendapatkan hasil kueri seperti "..., this is tablestore", "is this tablestore", "tablestore is cool", "this", dan "is". |
Operator | Operator logika. Secara default, operator logika OR digunakan, yang menunjukkan bahwa sebuah baris memenuhi kondisi kueri jika nilai kolom berisi jumlah token yang ditentukan. Jika Anda mengatur parameter Operator ke AND, sebuah baris hanya memenuhi kondisi kueri jika nilai kolom berisi semua token. |
MinimumShouldMatch | Jumlah minimum token yang cocok terkandung dalam nilai kolom. Sebuah baris hanya dikembalikan jika nilai kolom yang ditentukan oleh parameter NamaKolom dalam baris tersebut berisi setidaknya jumlah minimum token yang cocok. Catatan Parameter MinimumShouldMatch harus digunakan dengan operator logika OR. |
Offset | Posisi dari mana kueri saat ini dimulai. |
Batas | Jumlah maksimum baris yang ingin Anda kembalikan dalam kueri saat ini. Untuk hanya menanyakan jumlah baris yang memenuhi kondisi kueri tanpa data spesifik, atur parameter Batas ke 0. |
DapatkanJumlahTotal | Menentukan apakah akan mengembalikan jumlah total baris yang memenuhi kondisi kueri. Nilai default: false. Jika Anda mengatur parameter ini ke true, performa kueri akan terpengaruh. |
ColumnsToGet | Menentukan apakah akan mengembalikan semua kolom dari setiap baris yang memenuhi kondisi kueri. Anda dapat menentukan parameter ReturnAll dan Kolom. Secara default, parameter ReturnAll disetel ke false, yang menunjukkan bahwa tidak semua kolom dikembalikan. Jika parameter ReturnAll disetel ke false, Anda dapat menggunakan parameter Kolom untuk menentukan kolom yang ingin Anda kembalikan. Jika Anda tidak menentukan parameter Kolom, hanya kolom kunci utama yang dikembalikan. Jika Anda mengatur ReturnAll ke true, semua kolom dikembalikan. |
Contoh kode
Berikut adalah contoh kode untuk menanyakan baris-baris yang nilainya Col_Keyword cocok dengan 'hangzhou':
/**
* Query the rows whose value of Col_Keyword matches "hangzhou" in a table. Tablestore returns the total number of rows that meet the query conditions and part of the matched rows.
*/
func MatchQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
query := &search.MatchQuery{} // Set the query type to MatchQuery.
query.FieldName = "Col_Keyword" // Specify the name of the column that you want to query.
query.Text = "hangzhou" // Specify the keyword that is used to match the value of the column.
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(query)
searchQuery.SetGetTotalCount(true)
searchQuery.SetOffset(0) // Set the Offset parameter to 0.
searchQuery.SetLimit(20) // Set the Limit parameter to 20, which indicates a maximum of 20 rows can be returned.
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil { // An error occurs.
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned.
fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions.
fmt.Println("RowCount: ", len(searchResponse.Rows)) // Display the total number of rows that are returned.
for _, row := range searchResponse.Rows {
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody)) // By default, if you do not specify the columnsToGet parameter, only the primary key columns are returned.
}
// Return all columns in the rows that meet the query conditions.
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll:true,
})
searchResponse, err = client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned.
fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions.
fmt.Println("RowCount: ", len(searchResponse.Rows))
for _, row := range searchResponse.Rows {
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody))
}
}Pertanyaan Umum
Referensi
Saat menggunakan indeks pencarian untuk menanyakan data, Anda dapat menggunakan metode kueri berikut: kueri tepat, kueri terms, kueri cocok semua, kueri kecocokan, kueri frasa kecocokan, kueri awalan, kueri rentang, kueri wildcard, kueri geo, kueri Boolean, kueri vektor KNN, kueri bersarang, dan kueri eksistensi. Anda dapat menggunakan metode kueri yang disediakan oleh indeks pencarian untuk menanyakan data dari berbagai dimensi sesuai dengan kebutuhan bisnis Anda.
Anda dapat mengurutkan atau membagi halaman baris yang memenuhi kondisi kueri dengan menggunakan fitur Pengurutan dan paging. Untuk informasi lebih lanjut, lihat Pengurutan dan paging.
Anda dapat menggunakan fitur collapse (distinct) untuk meruntuhkan set hasil berdasarkan kolom tertentu. Dengan cara ini, data dari tipe yang ditentukan muncul hanya sekali dalam hasil kueri. Untuk informasi lebih lanjut, lihat Collapse (distinct).
Jika Anda ingin menganalisis data dalam tabel data, Anda dapat menggunakan fitur agregasi operasi Pencarian atau menjalankan pernyataan SQL. Sebagai contoh, Anda dapat memperoleh nilai minimum dan maksimum, jumlah, dan total jumlah baris. Untuk informasi lebih lanjut, lihat Agregasi dan Kueri SQL.
Jika Anda ingin memperoleh semua baris yang memenuhi kondisi kueri tanpa perlu mengurutkan baris, Anda dapat memanggil operasi ParallelScan dan ComputeSplits untuk menggunakan fitur pemindaian paralel. Untuk informasi lebih lanjut, lihat Melakukan pemindaian paralel.