Todos los productos
Search
Centro de documentos

Tablestore:Nested query

Última actualización: Sep 03, 2026

Una consulta anidada con el Tablestore SDK for Java busca coincidencias en un campo Nested y conserva los límites de las filas secundarias, lo que permite devolver dichas filas coincidentes.

Requisitos previos

Instale Tablestore SDK for Java e inicialice un cliente.

Descripción de la función

Una consulta anidada busca filas secundarias dentro de un campo Nested. Cada fila secundaria en un campo Nested conserva de forma independiente las relaciones entre sus campos. No es posible consultar directamente los subcampos de un campo Nested; en su lugar, debe envolver la subconsulta en un objeto NestedQuery.

NestedQuery.path especifica la ruta del campo anidado que se va a consultar. Los nombres de los campos en la subconsulta deben usar rutas completas. La subconsulta puede ser de cualquier tipo Query. Para consultar un campo anidado de varios niveles, establezca path directamente con la ruta completa del campo anidado objetivo o anide objetos NestedQuery para consultar cada nivel.

El hecho de que una misma fila secundaria deba cumplir varias condiciones depende de cómo se combinen NestedQuery y BoolQuery:

  • Para exigir que la misma fila secundaria cumpla varias condiciones, configure un BoolQuery que contenga las condiciones secundarias como subconsulta de un único NestedQuery.

  • Para permitir que distintas filas secundarias cumplan las condiciones por separado, cree un NestedQuery para cada condición y combine las consultas anidadas en un BoolQuery externo.

Llame a search para ejecutar una consulta anidada. En la condición de consulta, especifique la ruta del campo anidado, la subconsulta y el modo de puntuación.

SearchResponse search(SearchRequest request)

El siguiente ejemplo consulta filas secundarias en el campo anidado items cuyo campo items.keyword es igual a tablestore. La consulta devuelve hasta 10 filas y el número total de coincidencias.

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

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(termQuery);
nestedQuery.setScoreMode(ScoreMode.None);

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(nestedQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
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 van a devolver. 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 indica que no se configura un tiempo de espera de consulta por separado.

routingValues (opcional)

List<PrimaryKey>

Los valores de clave principal que corresponden a campos de enrutamiento personalizados. Deje este parámetro sin configurar 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 con un objeto NestedQuery para realizar una consulta anidada.

offset (opcional)

Integer

La posición inicial de la consulta.

limit (opcional)

Integer

El número máximo de filas que se van a devolver. Establezca este parámetro en 0 para no devolver ninguna fila.

collapse (opcional)

Collapse

La configuración de colapso de campos, que deduplica los resultados según un campo específico. Para más detalles sobre la configuración, consulte Collapse query results.

sort (opcional)

Sort

El orden de clasificación de los resultados. Para más detalles sobre la configuración, consulte Sort and paginate results.

trackTotalCount (opcional)

int

El número máximo esperado de filas coincidentes que se van a contar. 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 más detalles sobre la configuración, consulte Aggregation.

groupByList (opcional)

List<GroupBy>

La configuración de agrupación. Para más 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. Cuando establece token, el SDK borra sort porque el token ya contiene las condiciones de ordenamiento.

Condición de consulta anidada

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

Nombre

Tipo

Descripción

path (obligatorio)

String

La ruta del campo anidado que se va a consultar. Para un campo anidado de varios niveles, establezca este parámetro con la ruta completa del campo anidado objetivo, por ejemplo, items.details.

query (obligatorio)

Query

La condición de consulta que se ejecutará en las filas secundarias bajo path. La condición puede ser de cualquier tipo Query. Especifique un subcampo mediante su ruta completa, por ejemplo, items.keyword.

scoreMode (obligatorio)

ScoreMode

El modo de puntuación de la fila principal cuando coinciden varias filas secundarias. None deshabilita la puntuación de relevancia para las filas secundarias. Avg, Max, Min y Total utilizan el promedio, el máximo, el mínimo y la suma de las puntuaciones de las filas secundarias, respectivamente.

innerHits (opcional)

InnerHits

La configuración para devolver, ordenar, paginar y resaltar las filas secundarias coincidentes. Si omite este parámetro, no se devuelven los detalles de las filas secundarias coincidentes.

weight (opcional)

float

El peso de la consulta. El valor predeterminado es 1.0 y debe ser un número de punto flotante positivo. Un valor mayor aumenta las puntuaciones de las filas coincidentes, pero no cambia qué filas coinciden.

Configuración de devolución de filas secundarias

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

Nombre

Tipo

Descripción

sort (opcional)

Sort

El orden de clasificación de las filas secundarias coincidentes. Puede usar ScoreSort y DocSort. FieldSort no es compatible.

offset (opcional)

Integer

La posición inicial desde la cual se devuelven las filas secundarias coincidentes.

limit (opcional)

Integer

El número máximo de filas secundarias coincidentes que se van a devolver. El valor predeterminado es 3.

highlight (opcional)

Highlight

La configuración de resaltado para las filas secundarias coincidentes. Para obtener información sobre los campos y parámetros compatibles con el resaltado, consulte Summary and highlighting.

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 van a devolver. 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

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

returnAllFromIndex (opcional)

boolean

Especifica 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>

Las coincidencias de la consulta. Llame a getSearchHits() para obtener el valor. Si se configuró innerHits, lea las filas secundarias coincidentes 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 todas las particiones del índice se consultaron correctamente. 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.

Coincidencia de búsqueda

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

Nombre

Tipo

Descripción

row

Row

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

score

Double

La puntuación de relevancia. Llame a getScore() para obtener el valor.

offset

Integer

La posición de una fila secundaria anidada en la matriz original. Llame a getOffset() para obtener el valor. Este campo puede estar vacío en una coincidencia de fila principal.

highlightResultItem

HighlightResultItem

El resultado del resaltado. Llame a getHighlightResultItem() para obtener el valor.

searchInnerHits

Map<String, SearchInnerHit>

Las filas secundarias coincidentes agrupadas por la ruta del campo anidado. Llame a getSearchInnerHits() para obtener el mapa, o llame a getSearchInnerHitByPath(path) para obtener el resultado de una ruta específica.

Coincidencia anidada

response.searchHits[].searchInnerHits contiene valores SearchInnerHit con los siguientes campos.

Nombre

Tipo

Descripción

path

String

La ruta del campo anidado. Llame a getPath() para obtener el valor.

subSearchHits

List<SearchHit>

Las filas secundarias coincidentes. Llame a getSubSearchHits() para obtener el valor. En una consulta anidada de varios niveles, searchInnerHits en una coincidencia de fila secundaria puede contener filas coincidentes del siguiente nivel.

Ejemplos de escenarios

Consultar un campo anidado de varios niveles

Para consultar un campo anidado de varios niveles, establezca path con la ruta completa del campo anidado objetivo y especifique la ruta completa del subcampo en la subconsulta. El siguiente ejemplo consulta filas en las que items.details.name es igual a beta.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.details.name");
termQuery.setTerm(ColumnValue.fromString("beta"));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items.details");
nestedQuery.setQuery(termQuery);
nestedQuery.setScoreMode(ScoreMode.None);

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

Exigir que la misma fila secundaria cumpla varias condiciones

Configure un BoolQuery que contenga varias condiciones secundarias como subconsulta de un único NestedQuery. El siguiente ejemplo exige que la misma fila secundaria en items tenga un valor items.keyword igual a tablestore y un campo items.number.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.number");

BoolQuery childQuery = new BoolQuery();
childQuery.setMustQueries(Arrays.asList(termQuery, existsQuery));

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(childQuery);
nestedQuery.setScoreMode(ScoreMode.None);

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

Permitir que distintas filas secundarias cumplan varias condiciones

Cree un NestedQuery para cada condición y combine las consultas anidadas en un BoolQuery externo. El siguiente ejemplo permite que el valor items.keyword igual a tablestore y la existencia de items.number sean coincidentes en distintas filas secundarias.

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("items.keyword");
termQuery.setTerm(ColumnValue.fromString("tablestore"));
NestedQuery termNestedQuery = new NestedQuery();
termNestedQuery.setPath("items");
termNestedQuery.setQuery(termQuery);
termNestedQuery.setScoreMode(ScoreMode.None);

ExistsQuery existsQuery = new ExistsQuery();
existsQuery.setFieldName("items.number");
NestedQuery existsNestedQuery = new NestedQuery();
existsNestedQuery.setPath("items");
existsNestedQuery.setQuery(existsQuery);
existsNestedQuery.setScoreMode(ScoreMode.None);

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(
        Arrays.asList(termNestedQuery, existsNestedQuery));

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

Devolver y resaltar filas secundarias coincidentes

Use InnerHits para configurar la cantidad, el orden de clasificación y la configuración de resaltado de las filas secundarias coincidentes. El siguiente ejemplo consulta filas secundarias cuyo campo items.description contiene hangzhou y devuelve resultados resaltados.

MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("items.description");
matchQuery.setText("hangzhou");

HighlightParameter parameter = new HighlightParameter();
parameter.setPreTag("<em>");
parameter.setPostTag("</em>");
Highlight highlight = new Highlight();
highlight.addFieldHighlightParam("items.description", parameter);

InnerHits innerHits = new InnerHits();
innerHits.setLimit(3);
innerHits.setSort(new Sort(Arrays.asList(
        new ScoreSort(), new DocSort(SortOrder.ASC))));
innerHits.setHighlight(highlight);

NestedQuery nestedQuery = new NestedQuery();
nestedQuery.setPath("items");
nestedQuery.setQuery(matchQuery);
nestedQuery.setScoreMode(ScoreMode.None);
nestedQuery.setInnerHits(innerHits);

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

En una consulta anidada de varios niveles, configure innerHits en cada nivel de NestedQuery desde el cual se deban devolver o resaltar filas secundarias coincidentes.