Tablestore SDK for Java permite asignar campos de origen a distintos tipos de campo de índice mediante columnas virtuales, sin modificar el esquema de la tabla ni reescribir los datos.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Tablestore SDK for Java instalado y un cliente inicializado
Una tabla cuyo número máximo de versiones esté establecido en 1
Un TTL de tabla de -1 o actualizaciones de tabla con
UpdateRowdeshabilitado
Notas de uso
Al crear una columna virtual, el campo de origen y la columna virtual deben cumplir las siguientes reglas de conversión de tipos.
|
Tipo de campo de origen |
Tipo de columna virtual |
|
String |
Keyword (incluidos arreglos), FuzzyKeyword (incluidos arreglos), Text (incluidos arreglos), Long (incluidos arreglos), Double (incluidos arreglos), Date (incluidos arreglos), IP (incluidos arreglos), Geo-point (incluidos arreglos) |
|
Long |
Keyword, FuzzyKeyword, Text, Date |
|
Double |
Keyword, FuzzyKeyword, Text |
Las columnas virtuales solo pueden utilizarse en consultas y no se devuelven mediante ColumnsToGet. Para recuperar un valor, devuelva el campo de origen asignado a la columna virtual.
Descripción
Una columna virtual asigna un campo de la tabla de origen a un tipo de campo de índice de búsqueda diferente. Configure las columnas virtuales al crear un índice de búsqueda o agréguelas a un índice existente mediante la modificación dinámica de su esquema. Una vez creada la asignación, consulte los datos con el nombre de la columna virtual.
A continuación, los ejemplos muestran el flujo de trabajo completo: creación de un índice de búsqueda con columnas virtuales y consulta posterior de datos mediante una de dichas columnas.
Creación de columnas virtuales
En el siguiente ejemplo se asigna el campo de origen Keyword category a una columna virtual Long, y el campo de origen Long price a una columna virtual Keyword.
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("category_as_long", FieldType.LONG)
.setVirtualField(true)
.setSourceFieldName("category"),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("price_as_keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("price")));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
Cuando la solicitud se complete correctamente, espere a que el índice de búsqueda termine de sincronizar los datos antes de consultarlo.
Consulta de datos con una columna virtual
El siguiente ejemplo consulta las filas cuya columna virtual price_as_keyword es igual a la cadena 1000 y devuelve las columnas de la tabla de origen.
String tableName = "example_table";
String indexName = "example_index";
TermsQuery query = new TermsQuery();
query.setFieldName("price_as_keyword");
query.addTerm(ColumnValue.fromString("1000"));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(query);
searchQuery.setGetTotalCount(true);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
Parámetros
FieldSchema contiene los siguientes parámetros para definir una columna virtual. Para otros parámetros de campos del índice de búsqueda, consulte Create a search index.
|
Nombre |
Tipo |
Descripción |
|
fieldName (obligatorio) |
|
Nombre de la columna virtual. Debe ser único dentro del índice. |
|
fieldType (obligatorio) |
|
Tipo de campo del índice de búsqueda para la columna virtual. El tipo debe cumplir las reglas de conversión compatibles. |
|
isVirtualField (obligatorio) |
|
Establezca este parámetro en |
|
sourceFieldNames (obligatorio) |
|
Nombres de los campos de origen asignados a la columna virtual. Actualmente solo se admite un campo de origen. Configúrelo mediante |