Todos los productos
Search
Centro de documentos

Tablestore:Resúmenes y resaltado

Última actualización: Oct 09, 2026

Para usar la función de resumen y resaltado, debe habilitar el resaltado en un campo Text al crear un search index. Después, configure los parámetros de resaltado en su consulta para devolver fragmentos que contengan las consultas coincidentes y resaltar los términos encontrados.

Escenarios

La función de resumen y resaltado extrae fragmentos cercanos a las consultas coincidentes y resalta dichas consultas. Esta función es útil en escenarios de búsqueda de texto completo, como búsquedas web, recuperación de registros de chat y búsquedas en documentos.

Descripción general de la función

La función de resumen y resaltado destaca el texto de los resultados de búsqueda que coincide con sus consultas o se relaciona con ellas. Esto ayuda a los usuarios a encontrar contenido relevante rápidamente y mejora la eficiencia en la recuperación de información. También es compatible con estructuras de datos complejas que contienen tipos anidados, como JSON, para localizar la información con precisión. De forma predeterminada, Tablestore usa las etiquetas <em></em> para marcar las consultas coincidentes.

Para usar la función de resumen y resaltado, aplique la siguiente configuración:

  1. Al crear un search index, establezca el parámetro enableHighlighting en True para el campo Text. Para obtener más información, consulte Create a search index.

    Importante

    Solo puede habilitar la función de resumen y resaltado en campos Text.

  2. Al consultar datos, personalice el estilo de resaltado mediante la especificación de parámetros. Entre ellos se incluyen el método de codificación de los fragmentos resaltados, el número máximo de fragmentos por devolver y las etiquetas de apertura y cierre.

Suponga que habilitó la función de resumen y resaltado para un campo Text cuando creó un search index. Si el valor del campo Text es query highlight test, utilice una consulta match phrase para la palabra clave highlight. Una vez que especifique los parámetros de resaltado, se devuelve el fragmento resaltado query <em>highlight</em> test.

Notas

  • Cuando usa la función de resumen y resaltado con MatchQuery o MatchPhraseQuery, los términos coincidentes pueden quedar resaltados con varias etiquetas de apertura y cierre.

  • Si el tipo de tokenizer del campo Text es segmentación semántica máxima, la función de resumen y resaltado no es compatible con consultas MatchPhraseQuery.

  • La división de fragmentos puede separar un término coincidente dentro del texto. En ese caso, es posible que el término no se resalte.

API

La función de resumen y resaltado utiliza la API Search. Los tipos de consulta compatibles son TermQuery, TermsQuery, MatchQuery, MatchPhraseQuery, PrefixQuery, WildcardQuery y NestedQuery.

Parámetros

Al usar la función de resumen y resaltado, configure los parámetros de resaltado mediante el parámetro Highlight. Para las subcolumnas de un tipo anidado, establezca estos parámetros con InnerHits.

Parámetros de Highlight

Nombre

Tipo

Descripción

fieldHighlightParams (obligatorio)

Map<String, HighlightParameter>

Nombres de los campos y configuración de fragmentos. La clave es el nombre del campo cuyos resultados de resumen y resaltado desea devolver. Su valor es el objeto HighlightParameter correspondiente a dicho campo. El campo debe tener habilitado el resumen y resaltado, además de utilizarse en una condición de consulta compatible.

highlightEncoder (opcional)

HighlightEncoder

Método de codificación del texto original en los fragmentos resaltados. Valores válidos:

  • PLAIN (predeterminado): no codifica el texto original.

  • HTML: aplica escape HTML al texto original. Use este valor si muestra los resultados en una página web. Los caracteres <, >, ", ' y / se escapan como &lt;, &gt;, &quot;, &#x27; y &#x2F;, respectivamente.

fieldHighlightParams[].numberOfFragments (opcional)

Integer

Número máximo de fragmentos resaltados que se devuelven para un campo. Se recomienda establecer este parámetro en 1.

fieldHighlightParams[].fragmentSize (opcional)

Integer

Longitud objetivo de cada fragmento. El valor predeterminado es 100. La longitud real del fragmento puede diferir de este valor.

fieldHighlightParams[].preTag (opcional)

String

Etiqueta de apertura para un término coincidente. El valor predeterminado es <em>. Puede especificar una etiqueta personalizada como <b>. Debe configurar preTag y postTag de manera conjunta. Los caracteres compatibles son < > " ' /, a-z, A-Z y 0-9.

fieldHighlightParams[].postTag (opcional)

String

Etiqueta de cierre para un término coincidente. El valor predeterminado es </em>. Puede especificar una etiqueta personalizada como </b>. Debe configurar preTag y postTag de manera conjunta. Los caracteres compatibles son los mismos que para preTag.

fieldHighlightParams[].highlightFragmentOrder (opcional)

HighlightFragmentOrder

Orden en el que se devuelven varios fragmentos resaltados. TEXT_SEQUENCE (predeterminado) ordena los fragmentos según su posición en el texto original. SCORE los ordena de acuerdo con las puntuaciones de relevancia de los términos coincidentes.

Parámetros de InnerHits

Parámetro

Descripción

sort

Regla de ordenación de las subfilas anidadas devueltas.

offset

Posición inicial desde la cual se devuelven las subfilas cuando una columna anidada contiene varias de ellas.

limit

Número de subfilas que se devuelven cuando una columna anidada contiene varias de ellas. Valor predeterminado: 3.

highlight

Configuración de los parámetros de resaltado para las subcolumnas anidadas. Para obtener más información sobre esta configuración, consulte Highlight parameters.

Uso

Importante

La función de resumen y resaltado solo se puede utilizar mediante un SDK.

Antes de ejecutar una consulta de resaltado, complete los siguientes preparativos:

  • Debe contar con una cuenta de Alibaba Cloud o un usuario de RAM que tenga permisos para operar en Tablestore. Para otorgar estos permisos a un usuario de RAM, consulte Grant permissions to a RAM user using a RAM policy.

    Si utiliza un SDK y no dispone de un AccessKey válido, cree uno para su cuenta de Alibaba Cloud o usuario de RAM. Para obtener más información, consulte Create an AccessKey.

  • Se debe haber creado una tabla de datos. Para obtener más información, consulte Data table operations.

  • Cree un search index para la tabla de datos y habilite el resaltado en el campo especificado. Para obtener más información, consulte Create a search index.

  • Cuando use un SDK, inicialice el cliente de Tablestore. Para obtener más información, consulte Initialize Tablestore Client.

Puede combinar la función de resumen y resaltado con Java SDK, Go SDK, Python SDK y Node.js SDK. A continuación se muestran ejemplos de uso con el SDK de Java.

Uso del resumen y resaltado de consultas en campos no anidados

El siguiente ejemplo utiliza una consulta match para recuperar las filas donde el campo description contiene el término tablestore. Además, encierra los términos coincidentes de los fragmentos devueltos entre <b> y </b>. El campo description es un campo Text que tiene habilitado el resumen y resaltado.

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());
    }
}

Uso del resaltado al consultar campos anidados

En el siguiente ejemplo se muestra cómo usar NestedQuery para buscar datos donde el valor del subcampo Level1_Col1_Nested, dentro del campo anidado Col_Nested, coincida con `hangzhou shanghai`. La consulta de búsqueda se resalta en los resultados devueltos.

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);

Suponga que el campo anidado multinivel Col_Nested incluye dos subcampos: Level1_Col1_Text (Text) y Level1_Col2_Nested (Nested). El campo anidado Level1_Col2_Nested contiene el subcampo Level2_Col1_Text.

En el siguiente ejemplo se muestra cómo agregar un BoolQuery a un NestedQuery para aplicar las funciones de resumen y resaltado tanto en el subcampo Level1_Col1_Text del campo Col_Nested como en el subcampo Level2_Col1_Text bajo Level1_Col2_Nested.

public static void nestedQueryWithHighlighting(SyncClient client) { SearchRequest searchRequest = SearchRequest.newBuilder() .tableName("<TABLE_NAME>") .indexName("<SEARCH_INDEX_NAME>") .returnAllColumnsFromIndex(true) .searchQuery(SearchQuery.newBuilder() .limit(5) .query(QueryBuilders.nested() .path("Col_Nested") .scoreMode(ScoreMode.Min) .query(QueryBuilders.bool() .should(QueryBuilders.match("Col_Nested.Level1_Col1_Text", "hangzhou shanghai")) .should(QueryBuilders.nested() .path("Col_Nested.Level1_Col2_Nested") .scoreMode(ScoreMode.Min) .query(QueryBuilders.match("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", "hangzhou shanghai")) .innerHits(InnerHits.newBuilder() .highlight(Highlight.newBuilder() .addFieldHighlightParam("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", HighlightParameter.newBuilder().build()) .build()) .build()))) .innerHits(InnerHits.newBuilder() .sort(new Sort(Arrays.asList( new ScoreSort(), new DocSort() ))) .highlight(Highlight.newBuilder() .addFieldHighlightParam("Col_Nested.Level1_Col1_Text", HighlightParameter.newBuilder().build()) .build()) .build())) .build()) .build(); SearchResponse resp = client.search(searchRequest); // Print the highlighted results. printSearchHit(resp.getSearchHits(), ""); } /** Print the content of searchHit. @param searchHits The search hits. @param prefix The prefix to add when printing nested structures to show hierarchical information. / private static void printSearchHit(List<SearchHit> searchHits, String prefix) { for (SearchHit searchHit : searchHits) { if (searchHit.getScore() != null) { System.out.printf("%s Score: %s ", prefix, searchHit.getScore()); } if (searchHit.getOffset() != null) { System.out.printf("%s Offset: %s ", prefix, searchHit.getOffset()); } if (searchHit.getRow() != null) { System.out.printf("%s Row: %s ", prefix, searchHit.getRow().toString()); } // Print the highlighted fragments for each field. if (searchHit.getHighlightResultItem() != null) { System.out.printf("%s Highlight: ", prefix); StringBuilder strBuilder = new StringBuilder(); for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) { strBuilder.append(entry.getKey()).append(":").append("["); strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("] "); } System.out.printf("%s %s", prefix, strBuilder); } // Highlighted results for the nested type. for (SearchInnerHit searchInnerHit : searchHit.getSearchInnerHits().values()) { System.out.printf("%s Path: %s ", prefix, searchInnerHit.getPath()); System.out.printf("%s InnerHit: ", prefix); printSearchHit(searchInnerHit.getSubSearchHits(), prefix + " "); } System.out.println(); } }

Facturación

El uso de la función de resumen y resaltado durante las consultas de datos no afecta las reglas de facturación existentes.

Al consultar datos mediante un search index, se consume capacidad de lectura. Para obtener más información, consulte Search index metering and billing.

Preguntas frecuentes

Referencias