A consulta Exists no Tablestore SDK for Java filtra dados conforme a existência de um campo específico.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize um cliente.
Descrição do recurso
A consulta Exists (ExistsQuery, também chamada de consulta NULL ou consulta de valor nulo) identifica linhas em que determinado campo indexado existe. O campo é considerado inexistente se a coluna correspondente não tiver sido gravada na tabela de dados. Arrays vazios também são tratados como campos de array inexistentes.
Ao chamar search, defina o tipo de consulta como ExistsQuery e especifique o nome do campo. Para consultar um campo pai ou subcampo Nested, envolva ExistsQuery em uma NestedQuery. Para identificar linhas em que um campo não existe, adicione ExistsQuery a BoolQuery.mustNotQueries.
SearchResponse search(SearchRequest request)
O exemplo a seguir consulta linhas nas quais o campo city existe. A consulta retorna até 10 linhas e o número total de correspondências.
String tableName = "example_table";
String indexName = "example_index";
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(existsQuery);
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
request é um objeto SearchRequest com 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 de busca. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
Colunas a retornar. Sem essa configuração, apenas as colunas de chave primária são retornadas. |
|
timeoutInMillisecond (opcional) |
int |
Tempo limite de 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. Não defina este parâmetro se o roteamento personalizado não estiver configurado. |
Configurações de consulta
request.searchQuery é um objeto SearchQuery com os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
Query |
Condição de consulta. 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 este parâmetro como |
|
collapse (opcional) |
Collapse |
Configurações de colapso de campo para deduplicar resultados por um campo especificado. Para detalhes de configuração, consulte Collapse query results. |
|
sort (opcional) |
Sort |
Ordem de classificação dos resultados. Para detalhes de configuração, 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 detalhes de configuração, consulte Aggregation. |
|
groupByList (opcional) |
|
Configurações de agrupamento. Para detalhes de configuração, consulte Aggregation. |
|
token (opcional) |
byte[] |
Token de paginação. Defina este parâmetro com o valor |
Condição de consulta
request.searchQuery.query é um objeto ExistsQuery com o seguinte parâmetro.
|
Nome |
Tipo |
Descrição |
|
fieldName (obrigatório) |
String |
Nome do campo indexado a consultar. |
Colunas retornadas
request.columnsToGet é um objeto SearchRequest.ColumnsToGet com os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
columns (opcional) |
|
Colunas de atributo a retornar. Defina 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
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 sucesso. Chame |
Exemplos de cenários
Consultar linhas nas quais um campo não existe
Adicione ExistsQuery a BoolQuery.mustNotQueries para identificar linhas nas quais o campo city não existe.
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("city");
BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(existsQuery));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);
Consultar um campo Nested
Envolva ExistsQuery em uma NestedQuery. Para consultar o campo pai, defina fieldName como items. Para consultar um subcampo, especifique o caminho completo, como items.keyword. O exemplo a seguir consulta linhas nas quais o subcampo items.keyword existe.
ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.keyword");
NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(existsQuery);
nestedQuery.setScoreMode(ScoreMode.None);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);