Utilisez le SDK Tablestore pour Python afin de renvoyer des fragments de champs Text contenant les jetons correspondants et de marquer ces jetons.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
La fonctionnalité de résumé et de mise en surbrillance nécessite une version du SDK égale ou supérieure à 6.0.0. Nous vous recommandons d'utiliser la dernière version du SDK.
Lors de la création de l'index de recherche, définissez enable_highlighting sur True pour le champ Text cible.
Description
Le résumé et la mise en surbrillance extraient des fragments de texte autour des jetons correspondants et marquent ces jetons à l'aide de balises ouvrantes et fermantes. Cette fonctionnalité prend en charge uniquement les champs Text. Dans une requête, utilisez SearchQuery.highlight pour spécifier les champs et les configurations de fragmentation.
Le SDK Tablestore pour Python 6.4.6 prend en charge le résumé et la mise en surbrillance pour les requêtes TermQuery, TermsQuery, PrefixQuery, WildcardQuery, RangeQuery, BoolQuery, MatchQuery et MatchPhraseQuery. Pour la requête BoolQuery, vous pouvez mettre en surbrillance les champs utilisés par les types de sous-requêtes pris en charge. Pour la requête NestedQuery, configurez la mise en surbrillance des lignes enfants correspondantes dans InnerHits.highlight. Pour plus d'informations, consultez la rubrique Requête imbriquée.
Avec les requêtes MatchQuery ou MatchPhraseQuery, un jeton correspondant peut être marqué par plusieurs paires de balises ouvrantes et fermantes. La requête MatchPhraseQuery ne prend pas en charge la mise en surbrillance pour un champ Text utilisant l'analyseur sémantique maximal. Une limite de fragment peut scinder un jeton correspondant et empêcher sa mise en surbrillance.
L'exemple suivant recherche le jeton tablestore dans le champ description et marque les jetons correspondants dans les fragments avec les balises <b> et </b>.
query = MatchQuery("description", "tablestore")
highlight = Highlight(
[
HighlightParameter(
"description",
number_of_fragments=1,
fragment_size=100,
pre_tag="<b>",
post_tag="</b>",
)
],
HighlightEncoder.PLAIN_MODE,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10, highlight=highlight),
)
for hit in response.search_hits:
for field in hit.highlight_result.highlight_fields:
print(field.field_name, field.field_fragments)
Paramètres
Le paramètre search_query.highlight est de type Highlight. Le tableau suivant utilise des chemins complets pour décrire les deux niveaux de configuration de Highlight et de HighlightParameter.
|
Nom |
Type |
Description |
|
highlight_parameters (obligatoire) |
|
Les configurations de fragments mis en surbrillance pour les champs. Chaque champ doit avoir la mise en surbrillance activée et participer à un type de requête qui la prend en charge. |
|
highlight_encoder (facultatif) |
|
Le mode d'encodage du texte des fragments. Le mode |
|
highlight_parameters[].field_name (obligatoire) |
|
Le nom du champ |
|
highlight_parameters[].number_of_fragments (facultatif) |
|
Le nombre maximal de fragments à renvoyer pour un champ. Nous recommandons la valeur |
|
highlight_parameters[].fragment_size (facultatif) |
|
La longueur cible du fragment. Valeur par défaut : |
|
highlight_parameters[].pre_tag (facultatif) |
|
La balise ouvrante pour les jetons correspondants. Valeur par défaut : |
|
highlight_parameters[].post_tag (facultatif) |
|
La balise fermante pour les jetons correspondants. Valeur par défaut : |
|
highlight_parameters[].fragments_order (facultatif) |
|
L'ordre de tri des fragments. L'option |
Réponse
Les résultats de mise en surbrillance sont disponibles dans SearchResponse.search_hits[].highlight_result et présentent la structure suivante.
|
Champ |
Type |
Description |
|
search_hits |
|
Les résultats de recherche. |
|
search_hits[].row |
|
La ligne correspondante. |
|
search_hits[].highlight_result |
|
Le résultat du résumé et de la mise en surbrillance pour la ligne. La valeur est vide si aucune mise en surbrillance n'est renvoyée. |
|
search_hits[].highlight_result.highlight_fields |
|
Les mises en surbrillance pour les champs de la ligne. |
|
highlight_fields[].field_name |
|
Le nom du champ mis en surbrillance. |
|
highlight_fields[].field_fragments |
|
Les fragments mis en surbrillance. Les jetons correspondants sont marqués par les balises configurées. |
Réponse compatible avec les tuples
À partir de la version 5.2.0 du SDK Tablestore pour Python, les API de recherche renvoient des objets de réponse au lieu de tuples. Les versions 5.1.0 et antérieures renvoient directement des tuples. Dans les versions 5.2.1 et ultérieures, vous pouvez appeler SearchResponse.v1_response() pour obtenir un tuple compatible avec les versions précédentes. Pour le nouveau code, accédez directement aux attributs de SearchResponse afin d'éviter les erreurs de déballage si les champs de réponse sont étendus.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()