Todos los productos
Search
Centro de documentos

Tablestore:JSON queries

Última actualización: Sep 03, 2026

El Tablestore SDK for Java permite consultar subcampos de campos JSON de tipo Object o Nested en un índice de búsqueda. Los campos Object no conservan los límites entre objetos secundarios, mientras que los campos Nested sí los preservan.

Requisitos previos

  • Instale Tablestore SDK for Java e inicialice el cliente.

  • El campo destino debe estar configurado como campo JSON en el índice de búsqueda, y jsonType debe establecerse en OBJECT o NESTED. Para obtener más información, consulte Create a search index.

Descripción de la función

Las consultas JSON no utilizan un tipo de consulta dedicado. Seleccione un método de consulta según el jsonType del campo JSON en el índice de búsqueda.

Tipo JSON

Relaciones entre campos

Método de consulta

Object

No conserva los límites de los objetos dentro de un arreglo. Diferentes condiciones de consulta pueden ser satisfechas por distintos objetos.

Utilice directamente un tipo de consulta adecuado para el tipo de subcampo y los requisitos de coincidencia. Especifique la ruta completa en el nombre de cada subcampo.

Nested

Almacena cada objeto de un arreglo como una fila secundaria independiente y conserva las relaciones entre los campos del mismo objeto.

Envuelva la subconsulta en un NestedQuery y use path para especificar la ruta completa del campo Nested.

Por ejemplo, suponga que la columna address de una tabla es de tipo String y almacena el siguiente arreglo JSON:

[
  { "country": "China", "city": "hangzhou" },
  { "country": "usa", "city": "Seattle" }
]

Si busca tanto country="China" como city="Seattle", la fila se devuelve cuando address está configurado como campo Object, ya que diferentes objetos pueden satisfacer ambas condiciones. La fila no se devuelve cuando address está configurado como campo Nested, porque ningún objeto individual cumple ambas condiciones simultáneamente.

Llame a search para ejecutar una consulta JSON.

SearchResponse search(SearchRequest request)
Nota

Los subFieldSchemas de un campo JSON no pueden contener campos Vector.

Consultar un campo Object

El siguiente ejemplo consulta filas donde address.country es China y address.city es Seattle. Dado que address es un campo Object, diferentes objetos pueden satisfacer las dos condiciones.

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

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

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

BoolQuery objectQuery = new BoolQuery();
objectQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(objectQuery);
searchQuery.setLimit(10);

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

Consultar un campo Nested

El siguiente ejemplo consulta filas en las que un mismo objeto dentro de address tiene un valor address.country igual a China y un valor address.city igual a Seattle. Para obtener más información sobre los métodos de consulta y los parámetros de campos Nested, consulte Nested query.

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

TermQuery countryQuery = new TermQuery();
countryQuery.setFieldName("address.country");
countryQuery.setTerm(ColumnValue.fromString("China"));

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

BoolQuery childQuery = new BoolQuery();
childQuery.setMustQueries(Arrays.asList(countryQuery, cityQuery));

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

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

SearchRequest request =
        new SearchRequest(tableName, indexName, searchQuery);
SearchResponse response = client.search(request);
System.out.println(response.getRows());

Parámetros

Solicitud de búsqueda

request es de tipo SearchRequest y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

tableName (obligatorio)

String

Nombre de la tabla.

indexName (obligatorio)

String

Nombre del índice de búsqueda.

searchQuery (obligatorio)

SearchQuery

Condición de consulta y configuraciones generales de la consulta.

columnsToGet (opcional)

SearchRequest.ColumnsToGet

Configuración de las columnas que se devolverán. Si no configura este parámetro, solo se devuelven las columnas de clave principal.

timeoutInMillisecond (opcional)

int

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 específico para la consulta.

routingValues (opcional)

List<PrimaryKey>

Valores de clave principal correspondientes a campos de enrutamiento personalizados. No es necesario configurar este parámetro si no se utiliza enrutamiento personalizado.

Configuración de la consulta

request.searchQuery es de tipo SearchQuery y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

query (obligatorio)

Query

Condición de consulta. Para un campo Object, establezca directamente un tipo de consulta adecuado al tipo de subcampo y a los requisitos de coincidencia. Para un campo Nested, configure este parámetro con un objeto NestedQuery.

offset (opcional)

Integer

Posición desde la cual comienza la consulta actual.

limit (opcional)

Integer

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

Configuraciones de resumen y resaltado. Para un campo Nested, configure el resumen y el resaltado de las filas secundarias coincidentes mediante NestedQuery.innerHits.

collapse (opcional)

Collapse

Configuración de colapso de resultados, que elimina duplicados según el campo especificado.

sort (opcional)

Sort

Método de ordenamiento de los resultados.

trackTotalCount (opcional)

int

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

Filtro aplicado a los resultados de query.

aggregationList (opcional)

List<Aggregation>

Configuraciones de agregación.

groupByList (opcional)

List<GroupBy>

Configuraciones de agrupamiento.

token (opcional)

byte[]

Token de paginación. Configure este parámetro con el valor nextToken de la respuesta anterior para continuar leyendo datos. Cuando se establece token, el SDK borra sort porque el token ya contiene la condición de ordenamiento.

Condición de consulta Nested

Al consultar un campo Nested, request.searchQuery.query es de tipo NestedQuery y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

path (obligatorio)

String

Ruta del campo Nested que se va a consultar. Para consultar un campo Nested multinivel, especifique la ruta completa del campo destino.

query (obligatorio)

Query

Condición de consulta que se ejecutará en las filas secundarias ubicadas en path. Especifique la ruta completa en el nombre de cada subcampo.

scoreMode (obligatorio)

ScoreMode

Método utilizado para calcular la puntuación de la fila principal cuando coinciden varias filas secundarias. None no calcula puntuaciones 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

Configuraciones utilizadas para devolver, ordenar, paginar y resaltar las filas secundarias coincidentes. Si no configura este parámetro, no se devuelven los detalles de las filas secundarias coincidentes.

weight (opcional)

float

Peso de la consulta. El valor predeterminado es 1.0 y debe ser un número de punto flotante positivo. Un valor mayor incrementa la puntuación de una fila coincidente, pero no modifica el alcance de la coincidencia.

Configuración de devolución de filas secundarias

request.searchQuery.query.innerHits es de tipo InnerHits y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

sort (opcional)

Sort

Método de ordenamiento para las filas secundarias coincidentes. Se admiten ScoreSort y DocSort. No se admite FieldSort.

offset (opcional)

Integer

Posición desde la cual se devuelven las filas secundarias coincidentes.

limit (opcional)

Integer

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

highlight (opcional)

Highlight

Configuraciones de resumen y resaltado para las filas secundarias coincidentes.

Columnas devueltas

request.columnsToGet es de tipo SearchRequest.ColumnsToGet y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

columns (opcional)

List<String>

Nombres de las columnas de atributos que se devolverán. Configure este parámetro solo cuando tanto returnAll como returnAllFromIndex sean false. Si no configura 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. 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 puede establecer este parámetro y returnAll en true simultáneamente.

Respuesta

El método search devuelve un objeto SearchResponse. La siguiente tabla describe los campos principales.

Nombre

Tipo

Descripción

totalCount

long

Número de filas coincidentes. Llame a getTotalCount() para obtener el valor. Este depende de la configuración de trackTotalCount.

rows

List<Row>

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

searchHits

List<SearchHit>

Coincidencias de la consulta. Llame a getSearchHits() para obtener el valor. Desde este campo puede obtener las filas coincidentes, las puntuaciones, los resultados de resumen y resaltado, así como las filas secundarias coincidentes de campos Nested.

nextToken

byte[]

Token para la siguiente página. Llame a getNextToken() para obtener el valor. Si el valor no es null, utilícelo como token en la siguiente solicitud para continuar leyendo datos.

isAllSuccess

boolean

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