Ketika Anda menginisiasi permintaan query, Anda dapat mengaktifkan fitur sorot. Dalam hal ini, kata kunci dalam hasil yang memenuhi kondisi query akan disorot. Hanya bidang Teks yang mendukung fitur sorot.
Prasyarat
Sebuah instance OTSClient telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi instance OTSClient.
Tabel data telah dibuat dan data telah ditulis ke tabel data. 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.
Catatan penggunaan
Jika Anda mengaktifkan fitur sorot dalam query cocok atau query frase cocok, string query dalam hasil query mungkin disorot menggunakan beberapa tag pembuka (preTag) dan tag penutup (postTag).
Jika metode tokenisasi dari bidang Teks adalah tokenisasi berbasis unit semantik maksimum (MaxWord), fitur sorot tidak didukung ketika Anda melakukan query frase cocok pada bidang Teks.
Jika Anda ingin mengembalikan beberapa fragmen, string query dalam fragmen tersebut mungkin terpisah. Dalam hal ini, string query mungkin tidak disorot.
Parameter
Parameter | Deskripsi | |
HighlightEncoder | Metode pengkodean fragmen teks yang disorot. Nilai valid:
| |
FieldHighlightParams | Pengaturan sorotan untuk bidang. Anda hanya dapat mengaktifkan fitur sorot untuk bidang yang berisi kata kunci yang ditentukan dalam objek SearchQuery. | |
HighlightParameter | NumberOfFragments | Jumlah maksimum fragmen teks yang disorot yang ingin Anda kembalikan. Kami sarankan Anda mengatur parameter ini ke 1. |
FragmentSize | Panjang setiap fragmen teks yang ingin Anda kembalikan. Nilai default: 100. Penting Panjang aktual fragmen teks yang dikembalikan mungkin berbeda dari nilai parameter ini. | |
PreTag | Tag pembuka yang digunakan untuk menyorot kata kunci query. Contoh: | |
PostTag | Tag penutup yang digunakan untuk menyorot kata kunci query. Contoh: | |
HighlightFragmentOrder | Aturan pengurutan fragmen teks yang disorot yang ingin Anda kembalikan.
| |
Contoh
Kode sampel berikut memberikan contoh tentang cara menggunakan fitur MatchQuery untuk menanyakan data yang cocok dengan hangzhou shanghai dari bidang Col_Text dan menyorot kata kunci dalam hasil query. Dalam contoh ini, bidang Col_Text bertipe Teks.
func MatchQuerywithHighlight(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
query := &search.MatchQuery{} // Atur tipe query ke MatchQuery.
query.FieldName = "Col_Text" // Tentukan bidang yang ingin Anda cocokkan.
query.Text = "hangzhou shanghai" // Tentukan kata kunci yang ingin Anda cocokkan.
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(query)
highlight := &search.Highlight{
FieldHighlightParameters: map[string]*search.HighlightParameter{
"Col_Text": {
NumberOfFragments: proto.Int32(5),
PreTag: proto.String(""),
},
},
}
searchQuery.SetHighlight(highlight)
searchQuery.SetGetTotalCount(true)
searchQuery.SetOffset(0) // Atur parameter Offset ke 0.
searchQuery.SetLimit(20) // Atur parameter Limit ke 20, yang menentukan bahwa hingga 20 baris dapat dikembalikan.
searchRequest.SetSearchQuery(searchQuery)
// Tentukan bahwa semua bidang dalam indeks pencarian dikembalikan.
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
})
if resp, err := client.Search(searchRequest); err != nil {
fmt.Println("Highlighting query gagal dengan err: ", err)
} else {
fmt.Println("RequestId: " + resp.RequestId)
// Tampilkan hasil query yang disorot. Ketika Anda menanyakan bidang non-Nested, Anda dapat mengatur parameter padding ke null.
printSearchHit(resp.SearchHits, " ")
}
fmt.Println("highlight query selesai")
}
/**
* Tampilkan konten yang memenuhi kondisi query.
* @param searchHits searchHits
* Jika output menggunakan struktur Nested dengan awalan @param, tambahkan awalan untuk menampilkan informasi hierarki.
*/
func printSearchHit(searchHits []*tablestore.SearchHit, padding string) {
for _, searchHit := range searchHits {
if searchHit.Score != nil {
fmt.Printf("%sScore: %f\n", padding, *searchHit.Score)
}
if searchHit.Row != nil {
jsonBody, err := json.Marshal(*searchHit.Row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody))
}
if searchHit.HighlightResultItem != nil && len(searchHit.HighlightResultItem.HighlightFields) != 0 {
fmt.Printf("%sHighlight: \n", padding)
for colName, highlightResult := range searchHit.HighlightResultItem.HighlightFields {
fmt.Printf("%sColumnName: %s, Highlight_Fragments: %v\n", padding+padding, colName, highlightResult.Fragments)
}
}
fmt.Println("")
}
}Referensi
Untuk informasi tentang fitur highlight, lihat Highlight keywords.
Untuk informasi tentang cara menggunakan fitur highlight saat Anda membuat kueri pada Nested fields, lihat Nested query.