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
jsonTypedebe establecerse enOBJECToNESTED. 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 |
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)
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 |
|
routingValues (opcional) |
|
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 |
|
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 |
|
highlight (opcional) |
Highlight |
Configuraciones de resumen y resaltado. Para un campo Nested, configure el resumen y el resaltado de las filas secundarias coincidentes mediante |
|
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 |
|
filter (opcional) |
SearchFilter |
Filtro aplicado a los resultados de |
|
aggregationList (opcional) |
|
Configuraciones de agregación. |
|
groupByList (opcional) |
|
Configuraciones de agrupamiento. |
|
token (opcional) |
byte[] |
Token de paginación. Configure este parámetro con el valor |
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 |
|
scoreMode (obligatorio) |
ScoreMode |
Método utilizado para calcular la puntuación de la fila principal cuando coinciden varias filas secundarias. |
|
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 |
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 |
|
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 |
|
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) |
|
Nombres de las columnas de atributos que se devolverán. Configure este parámetro solo cuando tanto |
|
returnAll (opcional) |
boolean |
Indica si se deben devolver todas las columnas de atributos de la tabla. El valor predeterminado es |
|
returnAllFromIndex (opcional) |
boolean |
Indica si se deben devolver todas las columnas de atributos indexadas. El valor predeterminado es |
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 |
|
rows |
|
Filas devueltas por la consulta actual. Llame a |
|
searchHits |
|
Coincidencias de la consulta. Llame a |
|
nextToken |
byte[] |
Token para la siguiente página. Llame a |
|
isAllSuccess |
boolean |
Indica si se consultaron todas las particiones del índice. Llame a |