Utilisez le résumé et la mise en surbrillance avec le SDK Tablestore pour Java afin de renvoyer des fragments issus des champs Text contenant les termes correspondants, et marquez ces termes à l'aide des balises configurées.
Prérequis
Installez le SDK Tablestore pour Java et initialisez un client.
Description de la fonctionnalité
Le résumé et la mise en surbrillance extraient des fragments de texte situés autour des termes correspondant à une requête, puis entourent ces termes de balises d'ouverture et de fermeture. Utilisez ces fragments pour afficher le contexte des correspondances de requête. Cette fonctionnalité prend uniquement en charge les champs Text.
Avant d'utiliser le résumé et la mise en surbrillance, définissez enableHighlighting sur true pour le champ lors de la création d'un index de recherche. Dans une requête, utilisez SearchQuery.highlight pour spécifier les champs dont vous souhaitez renvoyer les fragments ainsi que les paramètres de fragmentation. Un champ doit être utilisé dans une condition de requête compatible avec le résumé et la mise en surbrillance. À défaut, aucun fragment mis en surbrillance n'est renvoyé pour ce champ.
Les types de requête suivants peuvent renvoyer des résultats de résumé et de mise en surbrillance : TermQuery, TermsQuery, MatchQuery, MatchPhraseQuery, PrefixQuery, WildcardQuery, RangeQuery, BoolQuery, ConstScoreQuery et NestedQuery.
Pour une requête BoolQuery ou ConstScoreQuery, configurez le résumé et la mise en surbrillance pour les champs utilisés par les sous-requêtes des sept types de requête mentionnés précédemment. Pour une requête NestedQuery, configurez InnerHits.highlight afin de renvoyer les résultats de résumé et de mise en surbrillance pour les lignes enfants correspondantes. Pour plus d'informations, consultez la rubrique Requête imbriquée.
Si vous utilisez
MatchQueryouMatchPhraseQuery, un terme correspondant peut être entouré de plusieurs paires de balises d'ouverture et de fermeture.Si la tokenisation sémantique maximale est utilisée pour un champ
Text,MatchPhraseQueryne prend pas en charge le résumé et la mise en surbrillance.Une limite de fragment peut scinder un terme correspondant. Dans ce cas, le terme n'est pas mis en surbrillance.
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.
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());
}
}
Paramètres
request.searchQuery.highlight est de type Highlight. Les valeurs dans fieldHighlightParams sont des objets HighlightParameter qui configurent le comportement des fragments pour chaque champ.
Le tableau suivant utilise les chemins complets des paramètres pour décrire les deux niveaux de configuration : Highlight et HighlightParameter.
|
Nom |
Type |
Description |
|
fieldHighlightParams (obligatoire) |
|
Les noms des champs et les paramètres de fragmentation. Une clé correspond au nom d'un champ dont vous souhaitez renvoyer les résultats de résumé et de mise en surbrillance. Sa 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. Nous vous recommandons 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. |
Réponse
Réponse de la requête
La méthode search renvoie un objet SearchResponse. Les champs suivants concernent le résumé et la mise en surbrillance.
|
Nom |
Type |
Description |
|
searchHits |
|
Les résultats de la requête, obtenus en appelant |
|
isAllSuccess |
boolean |
Indique si toutes les partitions d'index ont été interrogées. Vous pouvez obtenir la valeur en appelant |
Résultat de requête
response.searchHits[] est de type SearchHit. Les champs suivants concernent le résumé et la mise en surbrillance.
|
Nom |
Type |
Description |
|
row |
Row |
Les données de la ligne. Vous pouvez obtenir la valeur en appelant |
|
highlightResultItem |
HighlightResultItem |
Les résultats de résumé et de mise en surbrillance de tous les champs de la ligne. Vous pouvez obtenir la valeur en appelant |
Résultat de mise en surbrillance
response.searchHits[].highlightResultItem est de type HighlightResultItem et contient le champ suivant.
|
Nom |
Type |
Description |
|
highlightFields |
|
Les résultats de mise en surbrillance pour les champs de la ligne. Vous pouvez obtenir la mappe en appelant |
Fragments de champ
response.searchHits[].highlightResultItem.highlightFields[fieldName] est de type HighlightField et contient le champ suivant.
|
Nom |
Type |
Description |
|
fragments |
|
Les fragments mis en surbrillance pour le champ. Vous pouvez obtenir la liste en appelant |