Al consultar datos, puede establecer parámetros de resaltado para devolver fragmentos de texto que contengan la consulta de búsqueda y resalten dicha consulta. La función de resumen y resaltado solo es compatible con campos de tipo Text.
Requisitos previos
Se inicializó una instancia de OTSClient. Para obtener más información, consulte Initialize an OTSClient instance.
Se creó una tabla de datos y se escribieron datos en ella. Para obtener más información, consulte Create data tables y Write data.
Se creó un índice de búsqueda para la tabla de datos. Para obtener más información, consulte Create a search index.
Notas
La función de resaltado de consultas está disponible en Tablestore Node.js Software Development Kit (SDK) 5.5.0 y versiones posteriores. Asegúrese de usar una versión del SDK compatible. Para conocer el historial de versiones del SDK de Node.js, consulte Node.js SDK release history.
Cuando usa la función de resaltado de consultas con MatchQuery o MatchPhraseQuery, la consulta de búsqueda podría resaltarse con varias etiquetas de apertura y de cierre.
Si un campo Text usa tokenización con semántica máxima, la función de resaltado de consultas no es compatible con MatchPhraseQuery.
Es posible que una consulta de búsqueda no se resalte si la fragmentación divide la consulta dentro del texto original.
Parámetros
Parámetro | Descripción | |
highlightEncoder | Método de codificación para el contenido original de los fragmentos resaltados. Valores válidos:
| |
fieldHighlightParams | Parámetros de resaltado de un campo. Este parámetro solo se puede configurar para los campos incluidos en una consulta por palabra clave dentro de SearchQuery. | |
HighlightParameter | numberOfFragments | Número máximo de fragmentos resaltados que se devuelven. Se recomienda establecer este valor en 1. |
fragmentSize | Longitud de cada fragmento. Valor predeterminado: 100. Importante La longitud de los fragmentos devueltos podría no coincidir exactamente con este valor. | |
preTag | Etiqueta de apertura para resaltar la consulta de búsqueda, como | |
postTag | Etiqueta de cierre para resaltar la consulta de búsqueda, como | |
highlightFragmentOrder | Regla de ordenamiento de los fragmentos cuando se devuelven varios para un campo resaltado.
| |
Ejemplo
A continuación se muestra un ejemplo que usa una consulta de coincidencia para recuperar las filas donde el campo description contiene el término tablestore. En este caso, los términos coincidentes de los fragmentos devueltos se encierran entre <b> y </b>. El campo description es de tipo Text y tiene habilitada la función de resumen y resaltado.
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // To get only the row count without any specific data, set limit to 0. This prevents any rows from being returned.
query: { // Set the query type to MatchQuery.
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Text", // Set the column to match.
text: "hangzhou shanghai" // Set the value to match.
}
},
highlight:{
highlightEncoder:TableStore.HighlightEncoder.PLAIN_MODE,
highlightParameters:[
{
fieldName:"Col_Text",
preTag: "",
postTag: "",
fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
fragmentSize: 20,
numberOfFragments: 3,
}
],
},
getTotalCount: true // TotalCount in the results indicates the total number of rows in the table. The default value is false, which means the total count is not returned.
},
columnToGet: { // The columns to return. Valid values: RETURN_SPECIFIED (return custom columns), RETURN_ALL (return all columns), RETURN_ALL_FROM_INDEX (return all columns from the search index), and RETURN_NONE (return no columns).
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data.rows, null, 2));
printSearchHit(data.searchHits, "");
});
/**
* Print the content of searchHits.
* @param searchHits The search hits.
* @param prefix The prefix to add for nested structures to print hierarchical information.
*/
function printSearchHit(searchHits, prefix) {
TableStore.util.arrayEach(searchHits, function (searchHit) {
if (searchHit.highlightResultItem != null) {
console.log(prefix + "Highlight: \n");
var strBuilder = ""
for (const [key,val] of searchHit.highlightResultItem.highlightFields.entries()) {
strBuilder += key + ":[";
strBuilder += val.fragments.join(",") + "]\n";
console.log(strBuilder);
}
}
for (const [key,val] of searchHit.searchInnerHits.entries()) {
console.log(prefix + "Path: " + key + "\n");
console.log(prefix + "InnerHit: \n");
printSearchHit(val.subSearchHits, prefix + " ");
}
});
}
Referencias
Para obtener más información sobre la función de resaltado de consultas, consulte Summary and highlighting.
Para conocer cómo usar la función de resaltado de consultas con un campo anidado, consulte Nested query.