Una consulta de rango en un índice de búsqueda con el Tablestore SDK for Java filtra los datos mediante límites inferior y superior de valores de campo, y permite incluir o excluir cada límite.
Requisitos previos
Instale Tablestore SDK for Java e inicialice un cliente.
Descripción de la función
Una consulta de rango coincide con las filas cuyos valores de campo indexado se encuentran dentro de un intervalo especificado. Es posible establecer solo un límite inferior, solo un límite superior o ambos. Como mínimo, se requiere un límite. Para un campo Text, una fila coincide si cualquier token generado a partir del valor del campo cae dentro del intervalo.
Utilice greaterThan, greaterThanOrEqual, lessThan y lessThanOrEqual para especificar las condiciones mayor que, mayor o igual que, menor que y menor o igual que. Establezca el tipo de consulta como RangeQuery al llamar a search.
SearchResponse search(SearchRequest request)
El siguiente ejemplo consulta valores Long en el campo price que se encuentran dentro del intervalo semiabierto [100, 500). La consulta devuelve hasta 10 filas y el número total de coincidencias.
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
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 no se configura este parámetro, 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. No establezca este parámetro 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 como 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 |
|
highlight (opcional) |
Highlight |
La configuración de resumen y resaltado para campos |
|
collapse (opcional) |
Collapse |
La configuración de colapso de campos, que deduplica los resultados según 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 con el valor |
Condición de consulta
request.searchQuery.query es un objeto RangeQuery que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
fieldName (obligatorio) |
String |
El nombre del campo indexado que se consultará. Las consultas de rango admiten campos |
|
from (opcional) |
ColumnValue |
El límite inferior. Como mínimo, se requiere uno de |
|
to (opcional) |
ColumnValue |
El límite superior. Como mínimo, se requiere uno de |
|
includeLower (opcional) |
boolean |
Especifica si se debe incluir |
|
includeUpper (opcional) |
boolean |
Especifica si se debe incluir |
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 indexadas. El valor predeterminado es |
Valores devueltos
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 |
|
Los aciertos 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 fechas en un formato personalizado
Si date_string es un campo String en la tabla de datos y está asignado a un campo Date en el índice de búsqueda con el formato yyyy-MM-dd HH:mm:ss, utilice cadenas con el mismo formato como límites de la consulta. El siguiente ejemplo consulta el 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 marcas de tiempo epoch-second
Si date_epoch es un campo Integer en la tabla de datos y está asignado a un campo Date en el índice de búsqueda con el formato epoch_second, utilice marcas de tiempo epoch-second como límites de la consulta. El siguiente ejemplo consulta valores mayores que 1609459200.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("date_epoch");
rangeQuery.greaterThan(ColumnValue.fromLong(1609459200L));