Todos os produtos
Search
Central de documentação

Tablestore:JSON queries

Última atualização: Jul 27, 2026

Use o Tablestore SDK for Java para consultar subcampos de campos JSON do tipo Object ou Nested em um índice de pesquisa. Campos Object não preservam os limites entre objetos filhos, enquanto campos Nested mantêm essa separação.

Pré-requisitos

Descrição do recurso

Consultas JSON não utilizam um tipo de consulta dedicado. Selecione o método de consulta com base no jsonType do campo JSON no índice de pesquisa.

Tipo JSON

Relacionamentos entre campos

Método de consulta

Object

Não preserva os limites dos objetos em um array. Objetos distintos podem satisfazer condições de consulta diferentes.

Use diretamente um tipo de consulta adequado ao tipo do subcampo e aos requisitos de correspondência. Especifique o caminho completo no nome de cada subcampo.

Nested

Armazena cada objeto de um array como uma linha filha independente e preserva os relacionamentos entre os campos do mesmo objeto.

Envolva a subconsulta em um NestedQuery e use path para especificar o caminho completo do campo Nested.

Por exemplo, suponha que a coluna address de uma tabela seja do tipo String e armazene o seguinte array JSON:

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

Ao consultar simultaneamente country="China" e city="Seattle", a linha será retornada se address estiver configurado como campo Object, pois objetos diferentes podem satisfazer as duas condições. A linha não será retornada se address estiver configurado como campo Nested, já que nenhum objeto individual atende a ambas as condições.

Chame search para executar uma consulta JSON.

SearchResponse search(SearchRequest request)
Nota

O subFieldSchemas de um campo JSON não pode conter campos Vector.

Consultar um campo Object

O exemplo a seguir consulta linhas nas quais address.country é China e address.city é Seattle. Como address é um campo Object, objetos diferentes podem satisfazer as duas condições.

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 um campo Nested

O exemplo abaixo consulta linhas em que o mesmo objeto dentro de address possui address.country igual a China e address.city igual a Seattle. Para mais detalhes sobre métodos de consulta e 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

Solicitação de pesquisa

request é do tipo SearchRequest e contém os seguintes parâmetros.

Nome

Tipo

Descrição

tableName (obrigatório)

String

Nome da tabela.

indexName (obrigatório)

String

Nome do índice de pesquisa.

searchQuery (obrigatório)

SearchQuery

Condição de consulta e configurações comuns de consulta.

columnsToGet (opcional)

SearchRequest.ColumnsToGet

Configurações das colunas a retornar. Sem essa configuração, apenas as colunas de chave primária são retornadas.

timeoutInMillisecond (opcional)

int

Tempo limite da consulta no nível da solicitação, em milissegundos. O valor padrão é -1, indicando que nenhum tempo limite específico foi configurado.

routingValues (opcional)

List<PrimaryKey>

Valores de chave primária correspondentes a campos de roteamento personalizado. Ignore este parâmetro se não usar roteamento personalizado.

Configuração de consulta

request.searchQuery é do tipo SearchQuery e contém os seguintes parâmetros.

Nome

Tipo

Descrição

query (obrigatório)

Query

Condição de consulta. Para campos Object, defina diretamente um tipo de consulta adequado ao tipo do subcampo e aos requisitos de correspondência. Para campos Nested, defina este parâmetro como um objeto NestedQuery.

offset (opcional)

Integer

Posição inicial da consulta atual.

limit (opcional)

Integer

Número máximo de linhas a retornar. Se definido como 0, nenhuma linha será retornada.

highlight (opcional)

Highlight

Configurações de resumo e destaque. Para campos Nested, configure resumo e destaque para linhas filhas correspondentes usando NestedQuery.innerHits.

collapse (opcional)

Collapse

Configuração de colapso de resultados, que remove duplicatas com base no campo especificado.

sort (opcional)

Sort

Método de ordenação dos resultados.

trackTotalCount (opcional)

int

Número máximo esperado de linhas correspondentes a contar. O valor padrão é TRACK_TOTAL_COUNT_DISABLED, que desativa a contagem. Defina como TRACK_TOTAL_COUNT para contar todas as linhas correspondentes. Valores menores proporcionam melhor desempenho na consulta.

filter (opcional)

SearchFilter

Filtro aplicado aos resultados de query.

aggregationList (opcional)

List<Aggregation>

Configurações de agregação.

groupByList (opcional)

List<GroupBy>

Configurações de agrupamento.

token (opcional)

byte[]

Token de paginação. Defina este parâmetro com o valor nextToken da resposta anterior para continuar a leitura dos dados. Quando token é definido, o SDK limpa sort, pois o token já contém a condição de ordenação.

Condição de consulta Nested

Ao consultar um campo Nested, request.searchQuery.query é do tipo NestedQuery e contém os seguintes parâmetros.

Nome

Tipo

Descrição

path (obrigatório)

String

Caminho do campo Nested a consultar. Para consultar um campo Nested multinível, especifique o caminho completo do campo de destino.

query (obrigatório)

Query

Condição de consulta a executar nas linhas filhas em path. Especifique o caminho completo no nome de cada subcampo.

scoreMode (obrigatório)

ScoreMode

Método usado para calcular a pontuação da linha pai quando várias linhas filhas correspondem. None não calcula pontuações de relevância para linhas filhas. Avg, Max, Min e Total usam, respectivamente, a média, o máximo, o mínimo e a soma das pontuações das linhas filhas.

innerHits (opcional)

InnerHits

Configurações usadas para retornar, ordenar, paginar e destacar linhas filhas correspondentes. Sem essa configuração, os detalhes das linhas filhas correspondentes não são retornados.

weight (opcional)

float

Peso da consulta. O valor padrão é 1.0 e deve ser um número de ponto flutuante positivo. Um valor maior aumenta a pontuação de uma linha correspondente, mas não altera o escopo de correspondência.

Configuração de retorno de linhas filhas

request.searchQuery.query.innerHits é do tipo InnerHits e contém os seguintes parâmetros.

Nome

Tipo

Descrição

sort (opcional)

Sort

Método de ordenação para linhas filhas correspondentes. ScoreSort e DocSort são suportados. FieldSort não é suportado.

offset (opcional)

Integer

Posição a partir da qual as linhas filhas correspondentes são retornadas.

limit (opcional)

Integer

Número máximo de linhas filhas correspondentes a retornar. O valor padrão é 3.

highlight (opcional)

Highlight

Configurações de resumo e destaque para linhas filhas correspondentes.

Colunas retornadas

request.columnsToGet é do tipo SearchRequest.ColumnsToGet e contém os seguintes parâmetros.

Nome

Tipo

Descrição

columns (opcional)

List<String>

Nomes das colunas de atributo a retornar. Configure este parâmetro apenas quando tanto returnAll quanto returnAllFromIndex forem false. Sem essa configuração, apenas as colunas de chave primária são retornadas.

returnAll (opcional)

boolean

Indica se todas as colunas de atributo da tabela devem ser retornadas. O valor padrão é false.

returnAllFromIndex (opcional)

boolean

Indica se todas as colunas de atributo indexadas devem ser retornadas. O valor padrão é false. Não é possível definir este parâmetro e returnAll como true simultaneamente.

Resposta

O método search retorna um objeto SearchResponse. A tabela a seguir descreve os principais campos.

Nome

Tipo

Descrição

totalCount

long

Número de linhas correspondentes. Chame getTotalCount() para obter o valor. Este valor depende da configuração trackTotalCount.

rows

List<Row>

Linhas retornadas pela consulta atual. Chame getRows() para obter o valor. O número de linhas não excede limit.

searchHits

List<SearchHit>

Resultados da consulta. Chame getSearchHits() para obter o valor. A partir deste campo, é possível obter linhas correspondentes, pontuações, resultados de resumo e destaque, além de linhas filhas correspondentes de campos Nested.

nextToken

byte[]

Token para a próxima página. Chame getNextToken() para obter o valor. Se o valor não for null, utilize-o como token na próxima solicitação para continuar a leitura dos dados.

isAllSuccess

boolean

Indica se todas as partições do índice foram consultadas. Chame isAllSuccess() para obter o valor. Se o valor for false, apenas resultados parciais são retornados e totalCount pode ser menor que o número real de linhas correspondentes.