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
Instale o Tablestore SDK for Java e inicialize o cliente.
Configure o campo de destino como campo JSON no índice de pesquisa e defina
jsonTypecomoOBJECTouNESTED. Para mais informações, consulte Crie um índice de pesquisa.
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 |
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)
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 é |
|
routingValues (opcional) |
|
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 |
|
offset (opcional) |
Integer |
Posição inicial da consulta atual. |
|
limit (opcional) |
Integer |
Número máximo de linhas a retornar. Se definido como |
|
highlight (opcional) |
Highlight |
Configurações de resumo e destaque. Para campos Nested, configure resumo e destaque para linhas filhas correspondentes usando |
|
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 é |
|
filter (opcional) |
SearchFilter |
Filtro aplicado aos resultados de |
|
aggregationList (opcional) |
|
Configurações de agregação. |
|
groupByList (opcional) |
|
Configurações de agrupamento. |
|
token (opcional) |
byte[] |
Token de paginação. Defina este parâmetro com o valor |
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 |
|
scoreMode (obrigatório) |
ScoreMode |
Método usado para calcular a pontuação da linha pai quando várias linhas filhas correspondem. |
|
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 é |
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. |
|
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 é |
|
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) |
|
Nomes das colunas de atributo a retornar. Configure este parâmetro apenas quando tanto |
|
returnAll (opcional) |
boolean |
Indica se todas as colunas de atributo da tabela devem ser retornadas. O valor padrão é |
|
returnAllFromIndex (opcional) |
boolean |
Indica se todas as colunas de atributo indexadas devem ser retornadas. O valor padrão é |
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 |
|
rows |
|
Linhas retornadas pela consulta atual. Chame |
|
searchHits |
|
Resultados da consulta. Chame |
|
nextToken |
byte[] |
Token para a próxima página. Chame |
|
isAllSuccess |
boolean |
Indica se todas as partições do índice foram consultadas. Chame |