Ao consultar dados, defina parâmetros de realce para retornar trechos de texto que contenham o termo pesquisado e destacá-lo nos resultados. O recurso de resumo e realce é compatível apenas com campos do tipo Text.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Para mais informações, consulte Criar uma tabela de dados e Gravar dados.
Índice de busca criado para a tabela de dados. Para mais informações, consulte Criar índices de busca.
Observações
Ao usar o recurso de resumo e realce com MatchQuery ou MatchPhraseQuery, múltiplas tags de abertura e fechamento podem destacar os termos correspondentes.
Se o tipo de tokenizador do campo Text for tokenização semântica máxima, o recurso de resumo e realce não terá suporte em consultas com MatchPhraseQuery.
A divisão de fragmentos pode separar um termo correspondente no texto. Nesse caso, o termo pode não ser realçado.
Parâmetros
Parâmetro | Descrição | |
HighlightEncoder | Método de codificação dos fragmentos de texto realçados. Valores válidos:
| |
FieldHighlightParams | Configurações de realce do campo. Ative o recurso de realce somente para campos que contenham palavras-chave especificadas nos objetos SearchQuery. | |
HighlightParameter | NumberOfFragments | Número máximo de fragmentos de texto realçados a retornar. Recomendamos definir este parâmetro como 1. |
FragmentSize | Tamanho de cada fragmento de texto retornado. Valor padrão: 100. Importante O tamanho real do fragmento de texto retornado pode diferir do valor definido neste parâmetro. | |
PreTag | Tag de abertura usada para realçar as palavras-chave da consulta. Exemplos: | |
PostTag | Tag de fechamento usada para realçar as palavras-chave da consulta. Exemplos: | |
HighlightFragmentOrder | Regra de ordenação dos fragmentos de texto realçados a retornar.
| |
Exemplo
O exemplo abaixo demonstra como usar MatchQuery para localizar dados em que a coluna Col_Text corresponda a hangzhou shanghai e como realçar o termo pesquisado nos resultados. A coluna Col_Text é do tipo Text.
func MatchQuerywithHighlight(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_Text" // Specify the field that you want to match.
query.Text = "hangzhou shanghai" // Specify the keyword that you want to match.
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(query)
highlight := &search.Highlight{
FieldHighlightParameters: map[string]*search.HighlightParameter{
"Col_Text": {
NumberOfFragments: proto.Int32(5),
PreTag: proto.String("<b>"),
PostTag: proto.String("</b>"),
},
},
}
searchQuery.SetHighlight(highlight)
searchQuery.SetGetTotalCount(true)
searchQuery.SetOffset(0) // Set the Offset parameter to 0.
searchQuery.SetLimit(20) // Set the Limit parameter to 20, which specifies that up to 20 rows can be returned.
searchRequest.SetSearchQuery(searchQuery)
// Specify that all fields in the search index are returned.
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
})
if resp, err := client.Search(searchRequest); err != nil {
fmt.Println("Highlighting query failed with err: ", err)
} else {
fmt.Println("RequestId: " + resp.RequestId)
// Display the highlighted query results. When you query a non-Nested field, you can set the padding parameter to null.
printSearchHit(resp.SearchHits, " ")
}
fmt.Println("highlight query finished")
}
/**
* Display the content that meets the query conditions.
* @param searchHits searchHits
* If the output uses the @param prefix Nested structure, add the prefix to display the hierarchy information.
*/
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("")
}
}
Referências
Para detalhes sobre o recurso de realce, consulte Realçar palavras-chave.
Para saber como usar o recurso de realce em consultas de campos Nested, consulte Consulta do tipo Nested.