Lors de la création d'un index de recherche, activez la fonctionnalité de mise en surbrillance pour un champ Text. Ainsi, lors de l'interrogation des données via cet index, configurez les paramètres de surbrillance pour mettre en évidence les chaînes de requête dans les segments des lignes correspondant aux conditions de recherche.
Scénarios
Utilisez la fonctionnalité de mise en surbrillance lors d'une recherche en texte intégral pour surligner les chaînes de requête dans les segments des lignes correspondant aux critères de recherche. Cette fonctionnalité convient à des scénarios tels que la recherche web, la récupération d'historiques de discussion et la recherche documentaire.
Présentation de la fonctionnalité
La mise en surbrillance permet de surligner le texte correspondant ou lié aux chaînes de requête dans les résultats de recherche. Elle améliore l'efficacité de la récupération d'informations en permettant aux utilisateurs de localiser rapidement les termes recherchés. Vous pouvez également l'utiliser pour identifier avec précision les informations requises dans des données imbriquées à structure complexe, comme le format JSON. Par défaut, Tablestore utilise <em></em> pour mettre en surbrillance les chaînes de requête dans les résultats.
Pour utiliser la fonctionnalité de mise en surbrillance, effectuez les configurations suivantes :
-
Lors de la création d'un index de recherche, définissez le paramètre
enableHighlightingsurTruepour un champ Text. Pour plus d'informations, consultez Créer un index de recherche.ImportantLa mise en surbrillance ne peut être activée que pour les champs Text.
Lors de l'utilisation de la fonctionnalité de mise en surbrillance dans une requête, spécifiez un style personnalisé en configurant divers paramètres, tels que la méthode d'encodage des fragments de texte mis en surbrillance, le nombre maximal de fragments à renvoyer par ligne, ainsi que les balises d'ouverture et de fermeture.
Par exemple, si vous activez la mise en surbrillance pour un champ Text lors de la création d'un index de recherche, puis effectuez une requête de correspondance de phrase pour rechercher la chaîne West Lake dans ce champ, une ligne dont la valeur est Hangzhou West Lake Scenic Area satisfera les conditions. Le segment de texte renvoyé sera alors mis en forme comme suit : Hangzhou <em>West Lake</em> Scenic Area.
Remarques d'utilisation
Si vous activez la mise en surbrillance dans une requête MatchQuery ou MatchPhraseQuery, les chaînes de requête dans les résultats peuvent être mises en évidence à l'aide de plusieurs balises d'ouverture (
preTag) et de fermeture (postTag).Si la méthode de tokenisation d'un champ Text est basée sur l'unité sémantique maximale (MaxWord), la mise en surbrillance n'est pas prise en charge lors de l'exécution d'une requête MatchPhraseQuery sur ce champ.
Si vous souhaitez renvoyer plusieurs fragments, les chaînes de requête au sein de ces fragments peuvent être scindées. Dans ce cas, il est possible que la mise en surbrillance ne s'applique pas correctement.
Opération API
Pour utiliser la fonctionnalité de mise en surbrillance, appelez l'opération Search et définissez le type de requête sur TermQuery, TermsQuery, MatchQuery, MatchPhraseQuery, PrefixQuery, WildcardQuery ou NestedQuery.
Paramètres
Dans la plupart des cas, configurez les paramètres Highlight pour utiliser la mise en surbrillance. Pour les sous-champs d'un champ imbriqué, configurez les paramètres InnerHits.
Paramètres Highlight
|
Nom |
Type |
Description |
|
fieldHighlightParams (obligatoire) |
|
Les noms des champs et les paramètres de fragmentation. La clé correspond au nom du champ dont vous souhaitez renvoyer le résumé et les résultats de mise en surbrillance. La valeur est l'objet |
|
highlightEncoder (facultatif) |
HighlightEncoder |
La méthode d'encodage du texte original dans les fragments mis en surbrillance. Valeurs possibles :
|
|
fieldHighlightParams[].numberOfFragments (facultatif) |
Integer |
Le nombre maximal de fragments mis en surbrillance à renvoyer pour un champ. Il est recommandé de définir ce paramètre sur |
|
fieldHighlightParams[].fragmentSize (facultatif) |
Integer |
La longueur cible de chaque fragment. La valeur par défaut est |
|
fieldHighlightParams[].preTag (facultatif) |
String |
La balise d'ouverture pour un terme correspondant. La valeur par défaut est |
|
fieldHighlightParams[].postTag (facultatif) |
String |
La balise de fermeture pour un terme correspondant. La valeur par défaut est |
|
fieldHighlightParams[].highlightFragmentOrder (facultatif) |
HighlightFragmentOrder |
L'ordre dans lequel plusieurs fragments mis en surbrillance sont renvoyés. |
Paramètres InnerHits
|
Paramètre |
Description |
|
sort |
La règle de tri pour les lignes enfants du champ imbriqué. |
|
offset |
La position de départ des lignes enfants à renvoyer si le champ imbriqué contient plusieurs lignes enfants. |
|
limit |
Le nombre maximal de lignes enfants à renvoyer si le champ imbriqué contient plusieurs lignes enfants. Valeur par défaut : 3. |
|
highlight |
Les paramètres de mise en surbrillance pour les sous-champs du champ imbriqué. Pour plus d'informations, consultez Paramètres Highlight. |
Méthodes
La fonctionnalité de mise en surbrillance est disponible uniquement via les SDK Tablestore.
Avant d'utiliser la mise en surbrillance, assurez-vous d'avoir effectué les préparatifs suivants :
-
Un compte Alibaba Cloud ou un utilisateur RAM disposant des autorisations nécessaires pour les opérations Tablestore a été créé. Pour savoir comment accorder ces autorisations à un utilisateur RAM, consultez Utiliser une stratégie RAM pour accorder des autorisations à un utilisateur RAM.
Si vous souhaitez utiliser la mise en surbrillance via les SDK Tablestore, créez une paire AccessKey pour votre compte Alibaba Cloud ou votre utilisateur RAM. Pour plus d'informations, consultez Créer une paire AccessKey.
Une table de données a été créée. Pour plus d'informations, consultez Opérations sur une table de données.
Un index de recherche a été créé pour la table de données et la mise en surbrillance a été activée pour un champ spécifique. Pour plus d'informations, consultez Créer un index de recherche.
Si vous souhaitez utiliser la mise en surbrillance via les SDK Tablestore, initialisez une instance OTSClient. Pour plus d'informations, consultez Initialiser une instance OTSClient.
Vous pouvez utiliser les SDK Tablestore suivants pour exploiter la fonctionnalité de mise en surbrillance : SDK Tablestore pour Java, SDK Tablestore pour Go, SDK Tablestore pour Python et SDK Tablestore pour Node.js. Cet exemple utilise le SDK Tablestore pour Java.
Utiliser la mise en surbrillance lors de l'interrogation de champs non imbriqués
L'exemple suivant utilise une requête MatchQuery pour récupérer les lignes dont le champ description contient le terme tablestore. Les termes correspondants dans les fragments renvoyés sont entourés des balises <b> et </b>. Le champ description est un champ Text pour lequel la synthèse et la mise en surbrillance sont activées.
String tableName = "example_table";
String indexName = "example_index";
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore");
HighlightParameter highlightParameter = new HighlightParameter();
highlightParameter.setPreTag("<b>");
highlightParameter.setPostTag("</b>");
Highlight highlight = new Highlight();
highlight.addFieldHighlightParam("description", highlightParameter);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setHighlight(highlight);
searchQuery.setLimit(10);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
for (SearchHit hit : response.getSearchHits()) {
HighlightResultItem resultItem = hit.getHighlightResultItem();
if (resultItem == null) {
continue;
}
HighlightField field = resultItem.getHighlightFieldByName("description");
if (field != null) {
System.out.println(field.getFragments());
}
}
Utiliser la mise en surbrillance lors de l'interrogation de champs imbriqués
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("items.description");
matchQuery.setText("hangzhou");
HighlightParameter parameter = new HighlightParameter();
parameter.setPreTag("<em>");
parameter.setPostTag("</em>");
Highlight highlight = new Highlight();
highlight.addFieldHighlightParam("items.description", parameter);
InnerHits innerHits = new InnerHits();
innerHits.setLimit(3);
innerHits.setSort(new Sort(Arrays.asList(
new ScoreSort(), new DocSort(SortOrder.ASC))));
innerHits.setHighlight(highlight);
NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(matchQuery);
nestedQuery.setScoreMode(ScoreMode.None);
nestedQuery.setInnerHits(innerHits);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);
Règles de facturation
L'utilisation de la fonctionnalité de mise en surbrillance lors de l'interrogation des données n'affecte pas les règles de facturation existantes de Tablestore.
Lorsque vous utilisez un index de recherche pour interroger des données, vous êtes facturé pour le débit de lecture consommé. Pour plus d'informations, consultez Éléments facturables des index de recherche.
FAQ
Références
L'index de recherche prend en charge divers types de requêtes pour l'interrogation multidimensionnelle des données, notamment la requête TermQuery, la requête TermsQuery, la requête MatchAllQuery, la requête MatchQuery, la requête MatchPhraseQuery, la requête RangeQuery, la requête PrefixQuery, la requête SuffixQuery, la requête WildcardQuery, la requête TokenBasedWildcardQuery, la requête BooleanQuery, la requête GeoQuery, la requête NestedQuery, la recherche vectorielle, et la requête ExistsQuery.
Lors de l'interrogation des données, vous pouvez trier et paginer l'ensemble des résultats ou effectuer un pliage (déduplication).
Pour l'analyse des données, telle que la recherche de valeurs maximales ou minimales, le calcul d'une somme ou le comptage de lignes, vous pouvez utiliser les fonctionnalités d'agrégation statistique ou de requête SQL.
Pour exporter rapidement des données indépendamment de l'ordre de l'ensemble de résultats, utilisez la fonctionnalité Parallel Scan.