Todos los productos
Search
Centro de documentos

Tablestore:Boolean query

Última actualización: Sep 03, 2026

Una consulta booleana con el Tablestore SDK for Java combina varias condiciones de consulta mediante lógica AND, OR y NOT, y devuelve las filas que cumplen la condición combinada.

Requisitos previos

Instale Tablestore SDK for Java e inicialice un cliente.

Descripción de la función

Una consulta booleana utiliza BoolQuery para combinar una o más subconsultas en una condición de consulta compleja. Una subconsulta puede ser de cualquier tipo Query, incluido otro BoolQuery.

BoolQuery admite los siguientes tipos de cláusulas:

  • mustQueries: La fila debe coincidir con todas las subconsultas. Las subconsultas coincidentes contribuyen a la puntuación de relevancia. Este tipo de cláusula equivale a AND.

  • filterQueries: La fila debe coincidir con todas las subconsultas, pero estas no contribuyen a la puntuación de relevancia. Este tipo de cláusula también equivale a AND.

  • shouldQueries: La fila debe coincidir como mínimo con la cantidad de subconsultas especificada por minShouldMatch. Coincidir con más subconsultas genera una mayor puntuación de relevancia. Este tipo de cláusula equivale a OR.

  • mustNotQueries: La fila no debe coincidir con ninguna subconsulta. Este tipo de cláusula equivale a NOT y no contribuye a la puntuación de relevancia.

Si no se configura minShouldMatch y la consulta booleana contiene únicamente shouldQueries y mustNotQueries, debe coincidir al menos una subconsulta de shouldQueries. Si la consulta booleana contiene mustQueries o filterQueries en el mismo nivel, las subconsultas de shouldQueries son opcionales de forma predeterminada.

Llame a search para ejecutar una consulta booleana.

SearchResponse search(SearchRequest request)

El siguiente ejemplo consulta filas donde city es igual a hangzhou y category es igual a book. La consulta devuelve hasta 10 filas y el número total de coincidencias.

String tableName = "example_table";
String indexName = "example_index";
TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);
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.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 -1, lo que significa que no se establece un tiempo de espera independiente para la consulta.

routingValues (opcional)

List<PrimaryKey>

Los valores de clave principal correspondientes a campos de enrutamiento personalizados. No configure este parámetro si no hay 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 BoolQuery para realizar una consulta booleana.

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 0 para no devolver filas.

highlight (opcional)

Highlight

La configuración de resumen y resaltado cuando una subconsulta coincide con un campo Text. Para obtener detalles sobre la configuración, consulte Summary and highlighting.

collapse (opcional)

Collapse

La configuración de colapso de campos, que deduplica los resultados según un campo específico. 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 TRACK_TOTAL_COUNT_DISABLED, que deshabilita el conteo. Establezca este parámetro en TRACK_TOTAL_COUNT para contar todas las filas coincidentes. Un valor menor mejora el rendimiento de la consulta.

filter (opcional)

SearchFilter

Un filtro que se aplica a los resultados de query.

aggregationList (opcional)

List<Aggregation>

La configuración de agregación. Para obtener detalles sobre la configuración, consulte Aggregation.

groupByList (opcional)

List<GroupBy>

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 nextToken de la respuesta anterior para continuar leyendo filas. Al establecer token, el SDK borra sort porque el token ya contiene las condiciones de ordenamiento.

Condición de consulta booleana

request.searchQuery.query es un objeto BoolQuery que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

mustQueries (opcional)

List<Query>

Las subconsultas con las que una fila debe coincidir en su totalidad. Las subconsultas coincidentes contribuyen a la puntuación de relevancia. Este tipo de cláusula equivale a AND.

filterQueries (opcional)

List<Query>

Las subconsultas con las que una fila debe coincidir en su totalidad. Las subconsultas coincidentes no contribuyen a la puntuación de relevancia. Este tipo de cláusula equivale a AND.

shouldQueries (opcional)

List<Query>

Las subconsultas de las cuales debe coincidir un número mínimo especificado. Este tipo de cláusula equivale a OR. Coincidir con más subconsultas genera una mayor puntuación de relevancia.

mustNotQueries (opcional)

List<Query>

Las subconsultas con las que ninguna fila puede coincidir. Este tipo de cláusula equivale a NOT y no contribuye a la puntuación de relevancia.

minShouldMatch (opcional)

String o int

El número mínimo de subconsultas de shouldQueries que deben coincidir. Especifique un entero, como 2, o una cadena de porcentaje, como "75%". Si se omite este parámetro, el valor predeterminado es 0 cuando existen mustQueries o filterQueries en el mismo nivel. En otros casos que contienen shouldQueries, el valor predeterminado es 1.

weight (opcional)

Float

El peso de la consulta booleana. Si se omite este parámetro, la consulta utiliza un peso de 1.0. Un valor mayor incrementa la contribución de mustQueries y shouldQueries a la puntuación final de relevancia sin alterar qué filas coinciden.

Nota

setMinimumShouldMatch(Integer) está obsoleto. Utilice setMinShouldMatch(int) o setMinShouldMatch(String).

Columnas devueltas

request.columnsToGet es un objeto SearchRequest.ColumnsToGet que contiene los siguientes parámetros.

Nombre

Tipo

Descripción

columns (opcional)

List<String>

Las columnas de atributos que se devolverán. Configure este parámetro solo si tanto returnAll como returnAllFromIndex son false. Si omite este parámetro, solo se devuelven las columnas de clave principal.

returnAll (opcional)

boolean

Indica si se deben devolver todas las columnas de atributos de la tabla de datos. El valor predeterminado es false.

returnAllFromIndex (opcional)

boolean

Indica si se deben devolver todas las columnas de atributos indexadas. El valor predeterminado es false. No establezca returnAll y returnAllFromIndex en true simultáneamente.

Valores de retorno

Respuesta de búsqueda

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 getTotalCount() para obtener el valor. El valor devuelto depende de la configuración de trackTotalCount.

rows

List<Row>

Las filas devueltas por esta consulta. Llame a getRows() para obtener el valor. El número de filas no supera limit.

searchHits

List<SearchHit>

Los aciertos de la consulta. Llame a getSearchHits() para obtener el valor. Lea las puntuaciones de relevancia y los resultados de resumen y resaltado desde este campo.

nextToken

byte[]

El token de la página siguiente. Llame a getNextToken() para obtener el valor. Si el valor no es null, establézcalo como token en la siguiente solicitud para continuar leyendo filas.

isAllSuccess

boolean

Indica si se consultaron correctamente todas las particiones del índice. Llame a isAllSuccess() para obtener el valor. Si el valor es false, la respuesta contiene resultados parciales y totalCount podría ser menor que el número real de filas coincidentes.

Acierto de búsqueda

response.searchHits[] es un objeto SearchHit que contiene los siguientes campos principales.

Nombre

Tipo

Descripción

row

Row

La fila coincidente. Llame a getRow() para obtener el valor.

score

Double

La puntuación de relevancia. Llame a getScore() para obtener el valor. Cuando utiliza ScoreSort para ordenar por puntuación de relevancia, este campo contiene la puntuación real.

highlightResultItem

HighlightResultItem

El resultado de resumen y resaltado. Llame a getHighlightResultItem() para obtener el valor.

Ejemplos de escenarios

Coincidir con cualquier condición

Utilice shouldQueries para combinar condiciones y minShouldMatch para especificar el número mínimo de condiciones que deben coincidir. El siguiente ejemplo consulta filas donde city es igual a hangzhou o category es igual a book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(cityQuery, categoryQuery));
boolQuery.setMinShouldMatch(1);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Excluir filas que coinciden con una condición

Utilice mustNotQueries para excluir filas que coincidan con cualquier condición especificada. El siguiente ejemplo consulta filas donde city no es igual a hangzhou.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustNotQueries(Collections.singletonList(cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Filtrar por múltiples condiciones sin puntuación de relevancia

Utilice filterQueries para exigir que todas las subconsultas coincidan sin permitir que las condiciones contribuyan a la puntuación de relevancia. El siguiente ejemplo consulta filas donde city es igual a hangzhou y category es igual a book.

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setFilterQueries(Arrays.asList(cityQuery, categoryQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);

Anidar combinaciones de condiciones

Utilice un BoolQuery como subconsulta de otro BoolQuery para expresar lógica multinivel. El siguiente ejemplo implementa (city = "hangzhou" OR price < 150) OR (category = "book" AND (price = 300 OR price = 400)).

TermQuery cityQuery = new TermQuery();
cityQuery.setFieldName("city");
cityQuery.setTerm(ColumnValue.fromString("hangzhou"));

RangeQuery lowPriceQuery = new RangeQuery();
lowPriceQuery.setFieldName("price");
lowPriceQuery.lessThan(ColumnValue.fromLong(150));

BoolQuery firstGroup = new BoolQuery();
firstGroup.setShouldQueries(Arrays.asList(cityQuery, lowPriceQuery));

TermQuery price300Query = new TermQuery();
price300Query.setFieldName("price");
price300Query.setTerm(ColumnValue.fromLong(300));

TermQuery price400Query = new TermQuery();
price400Query.setFieldName("price");
price400Query.setTerm(ColumnValue.fromLong(400));

BoolQuery priceGroup = new BoolQuery();
priceGroup.setShouldQueries(Arrays.asList(price300Query, price400Query));

TermQuery categoryQuery = new TermQuery();
categoryQuery.setFieldName("category");
categoryQuery.setTerm(ColumnValue.fromString("book"));

BoolQuery secondGroup = new BoolQuery();
secondGroup.setMustQueries(Arrays.asList(categoryQuery, priceGroup));

BoolQuery boolQuery = new BoolQuery();
boolQuery.setShouldQueries(Arrays.asList(firstGroup, secondGroup));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(boolQuery);