Ao consultar dados, defina os parâmetros de destaque para que o sistema retorne trechos de texto contendo o termo de pesquisa, destacando-o. O recurso de resumo e destaque é compatível apenas com campos do tipo Text.
Pré-requisitos
Inicialize uma instância do OTSClient. Para mais informações, consulte Initialize an OTSClient instance.
Crie uma tabela de dados e grave dados nela. Para mais informações, consulte Create data tables e Write data.
Crie um índice de pesquisa para a tabela de dados. Para mais informações, consulte Create a search index.
Observações
O recurso de destaque de consulta está disponível no Software Development Kit (SDK) do Node.js para Tablestore versão 5.5.0 e posteriores. Certifique-se de usar uma versão compatível do SDK. Para mais informações sobre o histórico de versões do SDK do Node.js, consulte Node.js SDK release history.
Ao usar o recurso de destaque de consulta com MatchQuery ou MatchPhraseQuery, o termo de pesquisa pode ser destacado com múltiplas pre-tags e post-tags.
Se um campo Text usar a tokenização de semântica máxima, o recurso de destaque de consulta não será compatível com MatchPhraseQuery.
Um termo de pesquisa pode não ser destacado se o sharding dividir a consulta dentro do texto source.
Parâmetros
Parâmetro | Descrição | |
highlightEncoder | O método de codificação para o conteúdo original dos fragmentos destacados. Valores válidos:
| |
fieldHighlightParams | Os parâmetros de destaque para um campo. Defina este parâmetro apenas para campos incluídos em uma consulta de palavra-chave dentro do SearchQuery. | |
HighlightParameter | numberOfFragments | O número máximo de fragmentos destacados a serem retornados. Recomendamos definir este valor como 1. |
fragmentSize | O comprimento de cada fragmento. Valor padrão: 100. Importante O comprimento dos fragmentos retornados pode não ser exatamente igual a este valor. | |
preTag | A pre-tag para destacar o termo de pesquisa, como | |
postTag | A post-tag para destacar o termo de pesquisa, como | |
highlightFragmentOrder | A regra de ordenação para fragmentos quando vários fragmentos são retornados para um campo destacado.
| |
Exemplo
O exemplo a seguir usa uma match query para recuperar linhas nas quais o campo description contém o termo tablestore. O exemplo envolve os termos correspondentes nos fragmentos retornados com <b> e </b>. O campo description é um campo Text para o qual o resumo e o destaque estão ativados.
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 + " ");
}
});
}
Referências
Para mais informações sobre o recurso de destaque de consulta, consulte Summary and highlighting.
Para mais informações sobre como usar o recurso de destaque de consulta com um campo aninhado, consulte Nested query.