Use o recurso de resumo e destaque com o Tablestore SDK for Java para retornar fragmentos de campos Text que contenham termos correspondentes e marcar esses termos com as tags configuradas.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize um cliente.
Descrição do recurso
O recurso de resumo e destaque extrai fragmentos de texto ao redor dos termos correspondentes a uma consulta e os envolve em pré-tags e pós-tags. Use esses fragmentos para exibir o contexto das correspondências da consulta. Este recurso oferece suporte apenas a campos Text.
Antes de usar o resumo e destaque, defina enableHighlighting como true para o campo durante a crie um índice de pesquisa. Em uma consulta, use SearchQuery.highlight para especificar os campos cujos fragmentos você deseja retornar e as configurações desses fragmentos. O campo deve ser usado em uma condição de consulta compatível com resumo e destaque. Caso contrário, nenhum fragmento destacado será retornado para esse campo.
Os seguintes tipos de consulta podem retornar resultados de resumo e destaque: TermQuery, TermsQuery, MatchQuery, MatchPhraseQuery, PrefixQuery, WildcardQuery, RangeQuery, BoolQuery, ConstScoreQuery e NestedQuery.
Para BoolQuery ou ConstScoreQuery, configure o resumo e destaque nos campos usados pelas consultas filhas dos sete tipos mencionados anteriormente. Para NestedQuery, configure InnerHits.highlight para retornar resultados de resumo e destaque das linhas filhas correspondentes. Para mais informações, consulte Nested query.
Ao usar
MatchQueryouMatchPhraseQuery, um termo correspondente pode ser envolvido por múltiplos pares de pré-tags e pós-tags.Se a tokenização semântica máxima estiver ativada para um campo
Text, oMatchPhraseQuerynão oferecerá suporte a resumo e destaque.O limite de um fragmento pode dividir um termo correspondente. Nesse caso, o termo não será destacado.
O exemplo a seguir usa uma consulta de correspondência (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 com resumo e destaque habilitados.
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 é do tipo Highlight. Os valores em fieldHighlightParams são objetos HighlightParameter que configuram o comportamento dos fragmentos para campos individuais.
A tabela abaixo usa caminhos completos de parâmetros para descrever os dois níveis de configuração: Highlight e HighlightParameter.
|
Nome |
Tipo |
Descrição |
|
fieldHighlightParams (obrigatório) |
|
Nomes dos campos e configurações de fragmentos. A chave representa o nome do campo cujos resultados de resumo e destaque você deseja retornar. Seu valor corresponde ao objeto |
|
highlightEncoder (opcional) |
HighlightEncoder |
Método de codificação do texto original nos fragmentos destacados. Valores válidos:
|
|
fieldHighlightParams[].numberOfFragments (opcional) |
Integer |
Quantidade máxima de fragmentos destacados a serem retornados para um campo. Recomendamos definir este parâmetro como |
|
fieldHighlightParams[].fragmentSize (opcional) |
Integer |
Tamanho alvo de cada fragmento. O valor padrão é |
|
fieldHighlightParams[].preTag (opcional) |
String |
Pré-tag para um termo correspondente. O valor padrão é |
|
fieldHighlightParams[].postTag (opcional) |
String |
Pós-tag para um termo correspondente. O valor padrão é |
|
fieldHighlightParams[].highlightFragmentOrder (opcional) |
HighlightFragmentOrder |
Ordem de retorno quando há múltiplos fragmentos destacados. |
Resposta
Resposta da consulta
O método search retorna um objeto SearchResponse. Os campos a seguir referem-se ao resumo e destaque.
|
Nome |
Tipo |
Descrição |
|
searchHits |
|
Resultados da consulta, obtidos pela chamada de |
|
isAllSuccess |
boolean |
Indica se todas as partições do índice foram consultadas. Obtenha o valor chamando |
Resultado da consulta
response.searchHits[] é do tipo SearchHit. Os campos listados abaixo dizem respeito ao resumo e destaque.
|
Nome |
Tipo |
Descrição |
|
row |
Row |
Dados da linha. Para obter o valor, chame |
|
highlightResultItem |
HighlightResultItem |
Resultados de resumo e destaque de todos os campos da linha. Para obter o valor, chame |
Resultado do destaque
response.searchHits[].highlightResultItem é do tipo HighlightResultItem e contém o seguinte campo.
|
Nome |
Tipo |
Descrição |
|
highlightFields |
|
Resultados de destaque para os campos da linha. Para obter o mapa, chame |
Fragmentos de campo
response.searchHits[].highlightResultItem.highlightFields[fieldName] é do tipo HighlightField e contém o campo descrito a seguir.
|
Nome |
Tipo |
Descrição |
|
fragments |
|
Fragmentos destacados do campo. Para obter a lista, chame |