Use filtros pós-consulta com o Tablestore SDK for Java para refinar os resultados de uma consulta principal e separar condições adequadas para execução posterior.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize o cliente.
Use a versão 5.17.5 ou superior do Tablestore SDK for Java.
Funcionamento
Um filtro pós-consulta (SearchFilter) filtra as linhas candidatas após a execução da consulta principal (query). Em seguida, o sistema calcula agregações e agrupamentos com base nos resultados filtrados. Separar condições apropriadas para execução tardia da consulta principal reduz o custo de avaliação de condições complexas durante essa etapa. O benefício real de desempenho depende da seletividade da consulta principal e da condição de filtro.
Para usar um filtro pós-consulta, chame search e configure a consulta principal e o SearchFilter separadamente no objeto SearchQuery. A consulta principal aceita os tipos de consulta fornecidos pelos índices de busca. O filtro pós-consulta aceita apenas tipos específicos de consulta e de campo. Para mais informações, consulte Limits.
SearchResponse search(SearchRequest request)
O exemplo abaixo usa primeiro TermsQuery para buscar linhas em que o valor do campo category seja book. Depois, aplica um filtro pós-consulta para reter apenas as linhas cujo valor do campo score_long seja maior que 1 e menor que 10.
String tableName = "example_table";
String indexName = "example_index";
// Configure the main query.
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName("category");
termsQuery.addTerm(ColumnValue.fromString("book"));
// Configure the post-query filter.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("score_long");
rangeQuery.setFrom(ColumnValue.fromLong(1));
rangeQuery.setIncludeLower(false);
rangeQuery.setTo(ColumnValue.fromLong(10));
rangeQuery.setIncludeUpper(false);
SearchFilter searchFilter = new SearchFilter();
searchFilter.setQuery(rangeQuery);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(termsQuery);
searchQuery.setFilter(searchFilter);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAllFromIndex(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println("Total count: " + response.getTotalCount());
System.out.println("Rows: " + response.getRows());
Limites
Use o filtro pós-consulta sempre junto com uma consulta principal. Configure a consulta principal para reduzir o número de linhas candidatas antes da execução do filtro. Evite definir a consulta principal como
MatchAllQuery, exceto quando for necessário filtrar todas as linhas do índice de busca.O filtro pós-consulta aceita somente
TermQuery,TermsQuery,RangeQuery,ExistsQuerye condiçõesBoolQuerycompostas por esses tipos de consulta.Em um
BoolQueryusado como filtro pós-consulta, há suporte apenas paramustQueries,mustNotQuerieseshouldQueries. Não há suporte parafilterQueries.Apenas campos dos tipos
Keyword,LongeDoublepodem ser filtrados. Além disso, ativeenableSortAndAggpara esses campos.As condições do filtro pós-consulta não participam da pontuação de relevância. Definir
weightpara uma condição de filtro não altera as pontuações de relevância dos resultados da consulta.
Parâmetros
Solicitação de busca
request é um objeto SearchRequest que contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
tableName (obrigatório) |
String |
Nome da tabela. |
|
indexName (obrigatório) |
String |
Nome do índice de busca. |
|
searchQuery (obrigatório) |
SearchQuery |
Consulta principal, filtro pós-consulta e configurações gerais de consulta. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
Colunas a retornar. Se este parâmetro não for especificado, apenas as colunas de chave primária serão retornadas. |
|
timeoutInMillisecond (opcional) |
int |
Tempo limite da consulta no nível da solicitação, em milissegundos. O valor padrão é |
|
routingValues (opcional) |
|
Valores de chave primária de um campo de roteamento personalizado. Não configure este parâmetro se o roteamento personalizado não estiver em uso. |
Configurações de consulta
request.searchQuery é um objeto SearchQuery que contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
Query |
Condição da consulta principal. Tipos de consulta de índice de busca são aceitos. |
|
filter (obrigatório) |
SearchFilter |
Filtro pós-consulta que refina as linhas candidatas após a execução da consulta principal. |
|
offset (opcional) |
Integer |
Deslocamento inicial para a consulta. |
|
limit (opcional) |
Integer |
Número máximo de linhas a retornar. Se você definir este parâmetro como |
|
highlight (opcional) |
Highlight |
Configurações de resumo e destaque para campos |
|
collapse (opcional) |
Collapse |
Configurações de colapso de campo usadas para deduplicar resultados de consulta por um campo específico. Para detalhes de configuração, consulte Collapse query results. |
|
sort (opcional) |
Sort |
Ordem de classificação dos resultados da consulta. Para detalhes de configuração, consulte Sort and paginate results. |
|
trackTotalCount (opcional) |
int |
Número máximo de linhas correspondentes a contar. O valor padrão é |
|
aggregationList (opcional) |
|
Configurações de agregação. As agregações são calculadas a partir dos resultados do filtro pós-consulta. Para detalhes de configuração, consulte Aggregation. |
|
groupByList (opcional) |
|
Configurações de agrupamento. Os agrupamentos são calculados a partir dos resultados do filtro pós-consulta. Para detalhes de configuração, consulte Aggregation. |
|
token (opcional) |
byte[] |
Token de paginação. Para ler a próxima página, defina este parâmetro com o valor |
Filtro pós-consulta
request.searchQuery.filter é um objeto SearchFilter que contém o seguinte parâmetro.
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
Query |
Condição do filtro. Há suporte para |
Colunas retornadas
request.columnsToGet é um objeto SearchRequest.ColumnsToGet que contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
columns (opcional) |
|
Colunas de atributo a retornar. Configure este parâmetro apenas se |
|
returnAll (opcional) |
boolean |
Indica se todas as colunas de atributo da tabela devem ser retornadas. Valor padrão: |
|
returnAllFromIndex (opcional) |
boolean |
Indica se todas as colunas de atributo indexadas devem ser retornadas. Valor padrão: |
Resposta
search retorna um objeto SearchResponse. A tabela a seguir descreve os campos principais.
|
Nome |
Tipo |
Descrição |
|
totalCount |
long |
Quantidade de linhas que correspondem ao filtro pós-consulta, obtida por meio de |
|
rows |
|
Linhas retornadas pela solicitação atual, obtidas por meio de |
|
searchHits |
|
Resultados da busca, obtidos por meio de |
|
aggregationResults |
AggregationResults |
Resultados das agregações calculados a partir dos dados filtrados pelo filtro pós-consulta, obtidos por meio de |
|
groupByResults |
GroupByResults |
Resultados dos agrupamentos calculados a partir dos dados filtrados pelo filtro pós-consulta, obtidos por meio de |
|
nextToken |
byte[] |
Token para a próxima página, obtido por meio de |
|
isAllSuccess |
boolean |
Indica se todas as partições do índice foram consultadas, obtido por meio de |