A consulta de intervalo em um índice de busca com o Tablestore SDK for Java filtra dados pelos limites inferior e superior dos valores de campo e permite incluir ou excluir cada limite.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize um cliente.
Descrição do recurso
A consulta de intervalo corresponde às linhas cujos valores de campo indexado estão dentro de um intervalo especificado. Você pode definir apenas o limite inferior, apenas o limite superior ou ambos. Pelo menos um limite é obrigatório. Em campos Text, a linha corresponde se qualquer token gerado a partir do valor do campo estiver dentro do intervalo.
Use greaterThan, greaterThanOrEqual, lessThan e lessThanOrEqual para especificar as condições maior que, maior ou igual a, menor que e menor ou igual a. Defina o tipo de consulta como RangeQuery ao chamar search.
SearchResponse search(SearchRequest request)
O exemplo a seguir consulta valores Long no campo price dentro do intervalo semiaberto [100, 500). A consulta retorna até 10 linhas e o número total de correspondências.
String tableName = "example_table";
String indexName = "example_index";
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("price");
rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(100L));
rangeQuery.lessThan(ColumnValue.fromLong(500L));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
Parâmetros
Solicitação de busca
O objeto request é do tipo SearchRequest e contém os seguintes parâmetros:
|
Nome |
Tipo |
Descrição |
|
tableName (obrigatório) |
String |
Nome da tabela de dados. |
|
indexName (obrigatório) |
String |
Nome do índice de busca. |
|
searchQuery (obrigatório) |
SearchQuery |
Condição de consulta e configurações gerais. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
Colunas a retornar. Se este parâmetro não for configurado, 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 correspondentes aos campos de roteamento personalizado. Deixe este parâmetro indefinido se o roteamento personalizado não estiver configurado. |
Configurações de consulta
O objeto request.searchQuery é do tipo SearchQuery e contém os seguintes parâmetros:
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
Query |
Condição de consulta. Para consultas de intervalo, defina este parâmetro como um objeto |
|
offset (opcional) |
Integer |
Posição inicial da consulta. |
|
limit (opcional) |
Integer |
Número máximo de linhas a retornar. Defina como |
|
highlight (opcional) |
Highlight |
Configurações de resumo e destaque para campos |
|
collapse (opcional) |
Collapse |
Configurações de colapso de campo para remover duplicatas dos resultados com base em um campo específico. Para mais detalhes, consulte Collapse query results. |
|
sort (opcional) |
Sort |
Ordem de classificação dos resultados. Para mais detalhes, consulte Sort and paginate results. |
|
trackTotalCount (opcional) |
int |
Número máximo esperado de linhas correspondentes a contar. O valor padrão é |
|
filter (opcional) |
SearchFilter |
Filtro aplicado aos resultados de |
|
aggregationList (opcional) |
|
Configurações de agregação. Para mais detalhes, consulte Aggregation. |
|
groupByList (opcional) |
|
Configurações de agrupamento. Para mais detalhes, consulte Aggregation. |
|
token (opcional) |
byte[] |
Token de paginação. Defina este parâmetro com o valor |
Condição de consulta
O objeto request.searchQuery.query é do tipo RangeQuery e contém os seguintes parâmetros:
|
Nome |
Tipo |
Descrição |
|
fieldName (obrigatório) |
String |
Nome do campo indexado a consultar. Consultas de intervalo aceitam campos |
|
from (opcional) |
ColumnValue |
Limite inferior. É obrigatório definir pelo menos um entre |
|
to (opcional) |
ColumnValue |
Limite superior. É obrigatório definir pelo menos um entre |
|
includeLower (opcional) |
boolean |
Indica se |
|
includeUpper (opcional) |
boolean |
Indica se |
Colunas retornadas
O objeto request.columnsToGet é do tipo SearchRequest.ColumnsToGet e 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 de dados devem ser retornadas. O valor padrão é |
|
returnAllFromIndex (opcional) |
boolean |
Indica se todas as colunas de atributo indexadas devem ser retornadas. O valor padrão é |
Valores de retorno
O método search retorna um objeto SearchResponse. A tabela a seguir descreve os campos principais:
|
Nome |
Tipo |
Descrição |
|
totalCount |
long |
Número de linhas correspondentes. Chame |
|
rows |
|
Linhas retornadas pela consulta. Chame |
|
searchHits |
|
Acertos da consulta. Chame |
|
nextToken |
byte[] |
Token da próxima página. Chame |
|
isAllSuccess |
boolean |
Indica se todas as partições do índice foram consultadas com êxito. Chame |
Exemplos de cenários
Consultar datas em formato personalizado
Se date_string for um campo String na tabela de dados mapeado para um campo Date no índice de busca com o formato yyyy-MM-dd HH:mm:ss, use strings no mesmo formato como limites da consulta. O exemplo a seguir consulta o intervalo [2021-01-01 00:00:00, 2023-01-01 00:00:00):
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_string");
rangeQuery.greaterThanOrEqual(ColumnValue.fromString("2021-01-01 00:00:00"));
rangeQuery.lessThan(ColumnValue.fromString("2023-01-01 00:00:00"));
Consultar timestamps epoch-second
Se date_epoch for um campo Integer na tabela de dados mapeado para um campo Date no índice de busca com o formato epoch_second, use timestamps epoch-second como limites da consulta. O exemplo a seguir consulta valores maiores que 1609459200:
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_epoch");
rangeQuery.greaterThan(ColumnValue.fromLong(1609459200L));