Utilisez les fonctionnalités de résumé et de mise en surbrillance du SDK Tablestore pour Java afin de renvoyer des fragments issus des champs Text contenant les termes correspondants, et de marquer ces termes à l'aide des balises configurées.
Prérequis
Initialisez une instance OTSClient. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Créez une table de données et écrivez-y des données. Pour plus d'informations, consultez les rubriques Créer une table de données et Écrire des données.
Créez un index de recherche pour la table de données. Pour plus d'informations, consultez la rubrique Créer des index de recherche.
Notes
Lorsque vous utilisez les fonctionnalités de résumé et de mise en surbrillance avec une requête MatchQuery ou MatchPhraseQuery, plusieurs balises ouvrantes et fermantes peuvent mettre en surbrillance les termes correspondants.
Si le type de tokenizer du champ Text est défini sur la tokenisation sémantique maximale, les fonctionnalités de résumé et de mise en surbrillance ne sont pas prises en charge lors de l'utilisation d'une requête MatchPhraseQuery pour interroger les données.
Le fractionnement des fragments peut diviser un terme correspondant dans le texte. Dans ce cas, le terme risque de ne pas être mis en surbrillance.
Paramètres
Paramètre | Description | |
HighlightEncoder | La méthode d'encodage des fragments de texte mis en surbrillance. Valeurs possibles :
| |
FieldHighlightParams | Les paramètres de mise en surbrillance du champ. Vous pouvez activer la mise en surbrillance uniquement pour les champs contenant les mots-clés spécifiés dans les objets SearchQuery. | |
HighlightParameter | NumberOfFragments | Le nombre maximal de fragments de texte mis en surbrillance à renvoyer. Nous vous recommandons de définir ce paramètre sur 1. |
FragmentSize | La longueur de chaque fragment de texte à renvoyer. Valeur par défaut : 100. Important La longueur réelle du fragment de texte renvoyé peut différer de la valeur de ce paramètre. | |
PreTag | La balise ouvrante utilisée pour mettre en surbrillance les mots-clés de la requête. Exemples : | |
PostTag | La balise fermante utilisée pour mettre en surbrillance les mots-clés de la requête. Exemples : | |
HighlightFragmentOrder | La règle de tri des fragments de texte mis en surbrillance à renvoyer.
| |
Exemple
L'exemple suivant utilise une requête de correspondance pour récupérer les lignes dont le champ description contient le terme tablestore. L'exemple entoure les termes correspondants dans les fragments renvoyés avec <b> et </b>. Le champ description est un champ Text pour lequel le résumé et la mise en surbrillance sont activés.
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("")
}
}
Références
Pour plus d'informations sur la fonctionnalité de mise en surbrillance, consultez la rubrique Mettre en surbrillance les mots-clés.
Pour savoir comment utiliser la fonctionnalité de mise en surbrillance lors de l'interrogation de champs Nested, consultez la rubrique Requête de type Nested.