Utilice el resumen y resaltado con el Tablestore SDK for Java para obtener fragmentos de campos Text que contengan términos coincidentes y marcar dichos términos con las etiquetas configuradas.
Requisitos previos
Instale Tablestore SDK for Java e inicialice un cliente.
Descripción de la función
El resumen y resaltado extrae fragmentos de texto alrededor de los términos que coinciden con una consulta y encierra dichos términos entre etiquetas de apertura y cierre. Puede utilizar estos fragmentos para mostrar el contexto de las coincidencias de la consulta. Esta función solo es compatible con campos Text.
Antes de usar el resumen y resaltado, establezca enableHighlighting en true para el campo cuando create a search index. En una consulta, utilice SearchQuery.highlight para especificar los campos cuyos fragmentos desea obtener, así como la configuración de dichos fragmentos. El campo debe utilizarse en una condición de consulta que admita resumen y resaltado; de lo contrario, no se devolverán fragmentos resaltados para ese campo.
Los siguientes tipos de consulta pueden devolver resultados de resumen y resaltado: TermQuery, TermsQuery, MatchQuery, MatchPhraseQuery, PrefixQuery, WildcardQuery, RangeQuery, BoolQuery, ConstScoreQuery y NestedQuery.
Para una BoolQuery o ConstScoreQuery, puede configurar el resumen y resaltado en los campos utilizados por las consultas secundarias de los siete tipos mencionados anteriormente. Para una NestedQuery, configure InnerHits.highlight para obtener resultados de resumen y resaltado de las filas secundarias coincidentes. Para más información, consulte Nested query.
Si utiliza
MatchQueryoMatchPhraseQuery, un término coincidente podría quedar encerrado entre varios pares de etiquetas de apertura y cierre.Si se utiliza la tokenización semántica máxima en un campo
Text,MatchPhraseQueryno admite resumen y resaltado.Un límite de fragmento podría dividir un término coincidente. En este caso, el término no se resalta.
El siguiente ejemplo utiliza una consulta de coincidencia para recuperar filas donde el campo description contiene el término tablestore. El ejemplo encierra los términos coincidentes en los fragmentos devueltos con <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());
}
}
Parámetros
request.searchQuery.highlight es del tipo Highlight. Los valores en fieldHighlightParams son objetos HighlightParameter que configuran el comportamiento de los fragmentos para campos individuales.
La siguiente tabla utiliza las rutas completas de los parámetros para describir los dos niveles de configuración: Highlight y HighlightParameter.
|
Nombre |
Tipo |
Descripción |
|
fieldHighlightParams (obligatorio) |
|
Nombres de campos y configuración de fragmentos. La clave es el nombre del campo del cual desea obtener resultados de resumen y resaltado. Su valor es el objeto |
|
highlightEncoder (opcional) |
HighlightEncoder |
Método de codificación para el texto original en los fragmentos resaltados. Valores válidos:
|
|
fieldHighlightParams[].numberOfFragments (opcional) |
Integer |
Número máximo de fragmentos resaltados que se devolverán para un campo. Se recomienda establecer este parámetro en |
|
fieldHighlightParams[].fragmentSize (opcional) |
Integer |
Longitud objetivo de cada fragmento. El valor predeterminado es |
|
fieldHighlightParams[].preTag (opcional) |
String |
Etiqueta de apertura para un término coincidente. El valor predeterminado es |
|
fieldHighlightParams[].postTag (opcional) |
String |
Etiqueta de cierre para un término coincidente. El valor predeterminado es |
|
fieldHighlightParams[].highlightFragmentOrder (opcional) |
HighlightFragmentOrder |
Orden en que se devuelven múltiples fragmentos resaltados. |
Respuesta
Respuesta de la consulta
El método search devuelve un objeto SearchResponse. Los siguientes campos son relevantes para el resumen y resaltado.
|
Nombre |
Tipo |
Descripción |
|
searchHits |
|
Coincidencias de la consulta, que se obtienen al llamar a |
|
isAllSuccess |
boolean |
Indica si se consultaron todas las particiones del índice. Puede obtener el valor al llamar a |
Coincidencia de consulta
response.searchHits[] es del tipo SearchHit. Los siguientes campos son relevantes para el resumen y resaltado.
|
Nombre |
Tipo |
Descripción |
|
row |
Row |
Datos de la fila. Puede obtener el valor al llamar a |
|
highlightResultItem |
HighlightResultItem |
Resultados de resumen y resaltado de todos los campos en la fila. Puede obtener el valor al llamar a |
Resultado de resaltado
response.searchHits[].highlightResultItem es del tipo HighlightResultItem y contiene el siguiente campo.
|
Nombre |
Tipo |
Descripción |
|
highlightFields |
|
Resultados de resaltado para los campos de la fila. Puede obtener el mapa al llamar a |
Fragmentos de campo
response.searchHits[].highlightResultItem.highlightFields[fieldName] es del tipo HighlightField y contiene el siguiente campo.
|
Nombre |
Tipo |
Descripción |
|
fragments |
|
Fragmentos resaltados del campo. Puede obtener la lista al llamar a |