Todos los productos
Search
Centro de documentos

Tablestore:Use post-query filters

Última actualización: Sep 03, 2026

Utilice filtros posteriores a la consulta con Tablestore SDK for Java para filtrar aún más los resultados de una consulta principal y separar de esta las condiciones adecuadas para su ejecución posterior.

Requisitos previos

Funcionamiento

Un filtro posterior a la consulta (SearchFilter) filtra adicionalmente las filas candidatas después de que se ejecuta la consulta principal (query). Posteriormente, las agregaciones y las agrupaciones se calculan a partir de los resultados filtrados. Separar de la consulta principal las condiciones adecuadas para una ejecución posterior reduce el costo de evaluar condiciones complejas durante dicha consulta. La ventaja real de rendimiento depende de la selectividad de la consulta principal y de la condición del filtro.

Para usar un filtro posterior a la consulta, llame a search y configure la consulta principal y SearchFilter por separado en SearchQuery. La consulta principal admite los tipos de consulta proporcionados por los índices de búsqueda. El filtro posterior a la consulta solo admite tipos específicos de consulta y de campo. Para obtener más información, consulte Limits.

SearchResponse search(SearchRequest request)

El siguiente ejemplo utiliza primero TermsQuery para consultar filas donde el valor del campo category es book. A continuación, el ejemplo usa un filtro posterior a la consulta para conservar las filas donde el valor del campo score_long es mayor que 1 y menor que 10.

String tableName = "example_table";
String indexName = "example_index";

// Configure the main query.
TermsQuery termsQuery = new TermsQuery();
termsQuery.setFieldName("category");
termsQuery.addTerm(ColumnValue.fromString("book"));

// Configure the post-query filter.
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("score_long");
rangeQuery.setFrom(ColumnValue.fromLong(1));
rangeQuery.setIncludeLower(false);
rangeQuery.setTo(ColumnValue.fromLong(10));
rangeQuery.setIncludeUpper(false);

SearchFilter searchFilter = new SearchFilter();
searchFilter.setQuery(rangeQuery);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(termsQuery);
searchQuery.setFilter(searchFilter);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
        new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAllFromIndex(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println("Total count: " + response.getTotalCount());
System.out.println("Rows: " + response.getRows());

Límites

  • Un filtro posterior a la consulta debe usarse junto con una consulta principal. Configure la consulta principal para reducir el número de filas candidatas antes de que se ejecute el filtro posterior. No establezca la consulta principal como MatchAllQuery a menos que necesite filtrar todas las filas del índice de búsqueda.

  • Un filtro posterior a la consulta solo admite condiciones de tipo TermQuery, TermsQuery, RangeQuery, ExistsQuery y BoolQuery compuestas por estos tipos de consulta.

  • En una BoolQuery utilizada como filtro posterior a la consulta, solo se admiten mustQueries, mustNotQueries y shouldQueries. No se admite filterQueries.

  • Solo se pueden filtrar campos de tipo Keyword, Long y Double. Debe habilitar enableSortAndAgg para dichos campos.

  • Las condiciones del filtro posterior a la consulta no participan en la puntuación de relevancia. Establecer weight para una condición de filtro no modifica las puntuaciones de relevancia de los resultados de la consulta.

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.

indexName (obligatorio)

String

El nombre del índice de búsqueda.

searchQuery (obligatorio)

SearchQuery

La consulta principal, el filtro posterior a la consulta y la configuración común de la consulta.

columnsToGet (opcional)

SearchRequest.ColumnsToGet

Las columnas que se devolverán. Si no se especifica 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 indica que no se establece ningún tiempo de espera a nivel de solicitud.

routingValues (opcional)

List<PrimaryKey>

Los valores de clave principal de un campo de enrutamiento personalizado. No es necesario configurar este parámetro si no se utiliza 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 la consulta principal. Se admiten los tipos de consulta de índices de búsqueda.

filter (obligatorio)

SearchFilter

El filtro posterior a la consulta que filtra adicionalmente las filas candidatas después de que se ejecuta la consulta principal.

offset (opcional)

Integer

El desplazamiento desde el cual comienza la consulta.

limit (opcional)

Integer

El número máximo de filas que se devolverán. Si establece este parámetro en 0, no se devuelve ninguna fila.

highlight (opcional)

Highlight

La configuración de resumen y resaltado para campos de tipo Text. Para obtener detalles sobre la configuración, consulte Summary and highlighting.

collapse (opcional)

Collapse

La configuración de colapso de campos utilizada para deduplicar los resultados de la consulta por 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 de la consulta. Para obtener detalles sobre la configuración, consulte Sort and paginate results.

trackTotalCount (opcional)

int

El número máximo de filas coincidentes que se contarán. El valor predeterminado es TRACK_TOTAL_COUNT_DISABLED, lo que indica que no se cuentan las filas coincidentes. Establezca este parámetro en TRACK_TOTAL_COUNT para contar todas las filas coincidentes. Un valor menor mejora el rendimiento de la consulta.

aggregationList (opcional)

List<Aggregation>

La configuración de agregaciones. Las agregaciones se calculan a partir de los resultados del filtro posterior a la consulta. Para obtener detalles sobre la configuración, consulte Aggregation.

groupByList (opcional)

List<GroupBy>

La configuración de agrupaciones. Las agrupaciones se calculan a partir de los resultados del filtro posterior a la consulta. Para obtener detalles sobre la configuración, consulte Aggregation.

token (opcional)

byte[]

El token de paginación. Para leer la página siguiente, establezca este parámetro con el valor nextToken devuelto por la solicitud anterior. Cuando se establece token, el SDK borra sort porque el token de paginación ya contiene la condición de ordenamiento.

Filtro posterior a la consulta

request.searchQuery.filter es un objeto SearchFilter que contiene el siguiente parámetro.

Nombre

Tipo

Descripción

query (obligatorio)

Query

La condición del filtro. Se admiten condiciones de tipo TermQuery, TermsQuery, RangeQuery, ExistsQuery y BoolQuery compuestas por estos tipos de consulta.

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 no se especifica este parámetro, solo se devuelven las columnas de clave principal.

returnAll (opcional)

boolean

Especifica si se deben devolver todas las columnas de atributos de la tabla. Valor predeterminado: false.

returnAllFromIndex (opcional)

boolean

Especifica si se deben devolver todas las columnas de atributos indexadas. Valor predeterminado: false. Este parámetro y returnAll no pueden establecerse ambos en true simultáneamente.

Respuesta

search devuelve un objeto SearchResponse. La siguiente tabla describe los campos principales.

Nombre

Tipo

Descripción

totalCount

long

El número de filas que coinciden con el filtro posterior a la consulta, obtenido mediante getTotalCount(). El valor depende de la configuración de trackTotalCount.

rows

List<Row>

Las filas devueltas por la solicitud actual, obtenidas mediante getRows(). El número de filas no supera el valor de limit.

searchHits

List<SearchHit>

Los aciertos de búsqueda, obtenidos mediante getSearchHits().

aggregationResults

AggregationResults

Los resultados de agregación calculados a partir de los resultados del filtro posterior a la consulta, obtenidos mediante getAggregationResults().

groupByResults

GroupByResults

Los resultados de agrupación calculados a partir de los resultados del filtro posterior a la consulta, obtenidos mediante getGroupByResults().

nextToken

byte[]

El token para la página siguiente, obtenido mediante getNextToken(). Si el valor no es null, utilícelo como token en la siguiente solicitud.

isAllSuccess

boolean

Indica si se consultaron todas las particiones del índice, obtenido mediante isAllSuccess(). Si el valor es false, se devuelven resultados parciales y totalCount podría ser menor que el número real de filas coincidentes.