Una consulta Exists con el Tablestore SDK for Java filtra los datos según si un campo especificado existe o no.
Requisitos previos
Instale Tablestore SDK for Java e inicialice un cliente.
Descripción de la función
Una consulta Exists (ExistsQuery, también conocida como consulta NULL o consulta de valor nulo) coincide con las filas en las que existe un campo indexado especificado. Un campo no existe si la columna correspondiente no se escribió en la tabla de datos. Una matriz vacía también se considera como un campo de matriz inexistente.
Al llamar a search, establezca el tipo de consulta en ExistsQuery y especifique un nombre de campo. Para consultar un campo principal Nested o un subcampo, envuelva ExistsQuery dentro de una NestedQuery. Para coincidir con filas en las que un campo no existe, agregue ExistsQuery a BoolQuery.mustNotQueries.
SearchResponse search(SearchRequest request)
El siguiente ejemplo consulta las filas en las que existe el campo city. La consulta devuelve hasta 10 filas y el número total de coincidencias.
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
Solicitud de búsqueda
request es un objeto SearchRequest que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
tableName (obligatorio) |
String |
El nombre de la tabla de datos. |
|
indexName (obligatorio) |
String |
El nombre del índice de búsqueda. |
|
searchQuery (obligatorio) |
SearchQuery |
La condición de consulta y la configuración general de la consulta. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
Las columnas que se devolverán. Si este parámetro no se configura, solo se devuelven las columnas de clave principal. |
|
timeoutInMillisecond (opcional) |
int |
El tiempo de espera de la consulta a nivel de solicitud, en milisegundos. El valor predeterminado es |
|
routingValues (opcional) |
|
Los valores de clave principal que corresponden a campos de enrutamiento personalizados. Deje este parámetro sin establecer si no se ha configurado el enrutamiento personalizado. |
Configuración de la consulta
request.searchQuery es un objeto SearchQuery que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
query (obligatorio) |
Query |
La condición de consulta. Establezca este parámetro en un objeto |
|
offset (opcional) |
Integer |
La posición inicial de la consulta. |
|
limit (opcional) |
Integer |
El número máximo de filas que se devolverán. Establezca este parámetro en |
|
collapse (opcional) |
Collapse |
La configuración de colapso de campos, que deduplica los resultados por un campo especificado. Para obtener detalles sobre la configuración, consulte Collapse query results. |
|
sort (opcional) |
Sort |
El orden de clasificación de los resultados. Para obtener detalles sobre la configuración, consulte Sort and paginate results. |
|
trackTotalCount (opcional) |
int |
El número máximo esperado de filas coincidentes que se contarán. El valor predeterminado es |
|
filter (opcional) |
SearchFilter |
Un filtro que se aplica a los resultados de |
|
aggregationList (opcional) |
|
La configuración de agregación. Para obtener detalles sobre la configuración, consulte Aggregation. |
|
groupByList (opcional) |
|
La configuración de agrupación. Para obtener detalles sobre la configuración, consulte Aggregation. |
|
token (opcional) |
byte[] |
El token de paginación. Establezca este parámetro en el valor |
Condición de consulta
request.searchQuery.query es un objeto ExistsQuery que contiene el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
fieldName (obligatorio) |
String |
El nombre del campo indexado que se va a consultar. |
Columnas devueltas
request.columnsToGet es un objeto SearchRequest.ColumnsToGet que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
columns (opcional) |
|
Las columnas de atributos que se devolverán. Establezca este parámetro solo si tanto |
|
returnAll (opcional) |
boolean |
Especifica si se deben devolver todas las columnas de atributos de la tabla de datos. El valor predeterminado es |
|
returnAllFromIndex (opcional) |
boolean |
Especifica si se deben devolver todas las columnas de atributos indexados. El valor predeterminado es |
Valores de retorno
search devuelve un objeto SearchResponse. La siguiente tabla describe los campos principales.
|
Nombre |
Tipo |
Descripción |
|
totalCount |
long |
El número de filas coincidentes. Llame a |
|
rows |
|
Las filas devueltas por esta consulta. Llame a |
|
searchHits |
|
Las coincidencias de la consulta. Llame a |
|
nextToken |
byte[] |
El token de la página siguiente. Llame a |
|
isAllSuccess |
boolean |
Indica si todas las particiones del índice se consultaron correctamente. Llame a |
Ejemplos de escenarios
Consultar filas en las que un campo no existe
Agregue ExistsQuery a BoolQuery.mustNotQueries para coincidir con las filas en las que el campo city no 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 un campo Nested
Envuelva ExistsQuery dentro de una NestedQuery. Para consultar el campo principal, establezca fieldName en items. Para consultar un subcampo, especifique la ruta completa, como items.keyword. El siguiente ejemplo consulta las filas en las que existe el subcampo items.keyword.
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);