O Tablestore SDK for Java permite mapear campos source para diferentes tipos de campo de índice com colunas virtuais, sem alterar o esquema da tabela ou reescrever dados.
Pré-requisitos
Antes de começar, verifique se você tem:
Tablestore SDK for Java instalado e um cliente inicializado
Uma tabela com número máximo de versões definido como 1
TTL da tabela igual a -1 ou atualizações de tabela com
UpdateRowdesabilitado
Observações de uso
Ao criar uma coluna virtual, o campo source e a coluna virtual devem obedecer às seguintes regras de conversão de tipo.
|
Tipo do campo source |
Tipo da coluna virtual |
|
String |
Keyword (incluindo arrays), FuzzyKeyword (incluindo arrays), Text (incluindo arrays), Long (incluindo arrays), Double (incluindo arrays), Date (incluindo arrays), IP (incluindo arrays), Geo-point (incluindo arrays) |
|
Long |
Keyword, FuzzyKeyword, Text, Date |
|
Double |
Keyword, FuzzyKeyword, Text |
Colunas virtuais servem apenas para consultas e não podem ser retornadas por ColumnsToGet. Para obter um valor, retorne o campo source mapeado à coluna virtual.
Descrição
Uma coluna virtual mapeia um campo da tabela source para um tipo diferente de campo de índice de pesquisa. Configure colunas virtuais ao criar um índice de pesquisa ou adicione-as a um índice existente modificando dinamicamente seu esquema. Após criar o mapeamento, consulte dados usando o nome da coluna virtual.
Os exemplos a seguir demonstram o fluxo completo: criação de um índice de pesquisa com colunas virtuais e consulta de dados usando uma dessas colunas.
Criação de colunas virtuais
Este exemplo mapeia o campo source Keyword category para uma coluna virtual Long e o campo source Long price para uma coluna 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);
Após o êxito da solicitação, aguarde a sincronização completa dos dados no índice de pesquisa antes de consultá-lo.
Consulta de dados com uma coluna virtual
O exemplo abaixo consulta linhas cuja coluna virtual price_as_keyword seja igual à string 1000 e retorna as colunas da tabela source.
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 contém os seguintes parâmetros para definir uma coluna virtual. Para outros parâmetros de campo de índice de pesquisa, consulte Crie um índice de pesquisa.
|
Nome |
Tipo |
Descrição |
|
fieldName (obrigatório) |
|
Nome da coluna virtual. O nome deve ser único no índice. |
|
fieldType (obrigatório) |
|
Tipo de campo do índice de pesquisa para a coluna virtual. O tipo deve obedecer às regras de conversão compatíveis. |
|
isVirtualField (obrigatório) |
|
Defina este parâmetro como |
|
sourceFieldNames (obrigatório) |
|
Nomes dos campos source mapeados para a coluna virtual. Atualmente, há suporte para apenas um campo source. Configure-o com |