Use o método CreateSearchIndex para criar um índice de pesquisa em uma tabela de dados. Uma tabela de dados aceita vários índices de pesquisa. Ao criar o índice, adicione os campos que deseja consultar e configure opções avançadas, como campos de roteamento e pré-ordenação, conforme necessário.
Pré-requisitos
Cliente do Tablestore inicializado. Para mais informações, consulte Inicializar um cliente do Tablestore.
-
Tabela de dados criada que atenda às seguintes condições. Para mais informações, consulte Criar uma tabela de dados.
Parâmetro max versions definido como 1.
Tempo de vida (TTL) da tabela de dados definido como -1 ou operação UpdateRow desativada para a tabela.
Observações de uso
Os tipos de dados dos campos no índice de pesquisa devem corresponder aos tipos de dados dos campos na tabela de dados. Para mais informações, consulte Tipos de dados.
Para definir um valor de TTL diferente de -1 no índice de pesquisa, desative a operação UpdateRow na tabela de dados. O valor de TTL do índice de pesquisa deve ser menor ou igual ao valor de TTL da tabela de dados. Para mais informações, consulte Gerenciamento de ciclo de vida.
API
public class CreateSearchIndexRequest implements Request {
/** The name of the data table. */
private String tableName;
/** The name of the search index. */
private String indexName;
/** The schema of the search index. */
private IndexSchema indexSchema;
/**
* You do not need to set this parameter in most cases.
* Set this parameter by using the setter method only when dynamically modifying the search index schema. This parameter specifies the name of the source search index for reindexing.
*/
private String sourceIndexName;
/** The TTL for index data, in seconds. After you create the search index, you can call the UpdateSearchIndex operation to dynamically change this parameter. */
private Integer timeToLive;
}
public class IndexSchema implements Jsonizable {
/** The settings of the index. */
private IndexSetting indexSetting;
/** The settings for all fields in the index. */
private List<FieldSchema> fieldSchemas;
/** The custom presorting method for the index. */
private Sort indexSort;
}
Parâmetros
Ao criar um índice de pesquisa, especifique o nome da tabela de dados (tableName), o nome do índice de pesquisa (indexName) e o esquema do índice (indexSchema). O indexSchema inclui esquemas de campos (fieldSchemas), configurações do índice (indexSetting) e configurações de pré-ordenação do índice (indexSort). A tabela a seguir descreve os parâmetros.
|
Parâmetro |
Descrição |
|
tableName |
Nome da tabela de dados. |
|
indexName |
Nome do índice de pesquisa. |
|
fieldSchemas |
Lista de campos do índice. Cada FieldSchema contém os seguintes parâmetros:
|
|
indexSetting |
Configurações do índice, incluindo a configuração routingFields. routingFields (Opcional): Campos de roteamento personalizados. Selecione algumas colunas de chave primária como campos de roteamento. Na maioria dos casos, basta definir apenas um. Se você definir várias chaves de roteamento, o sistema concatena seus valores em um único valor. Ao gravar dados no índice, o sistema calcula a distribuição dos dados com base nos valores dos campos de roteamento. Registros com os mesmos valores de campo de roteamento são armazenados na mesma partição de dados. |
|
indexSort |
Configurações de pré-ordenação do índice, incluindo a configuração sorters. Se não especificado, os dados são ordenados pela chave primária por padrão. Nota
Índices que contêm campos Nested não aceitam o parâmetro indexSort. Nenhuma pré-ordenação é realizada. sorters (Opcional): Lista de métodos de pré-ordenação para o índice. Aceita ordenação por chave primária ou por valor de campo. Para mais informações sobre ordenação, consulte Ordenação e paginação.
|
|
sourceIndexName |
Opcional. Não é necessário na maioria dos casos. Defina este parâmetro usando o método setter apenas ao modificar dinamicamente o esquema do índice de pesquisa. Este parâmetro especifica o nome do índice de pesquisa de origem para reindexação. |
|
timeToLive |
Opcional. Tempo de vida (TTL) dos dados no índice de pesquisa, correspondente ao período de retenção de dados. Unidade: segundos. Valor padrão: -1, indicando que os dados nunca expiram. Valor mínimo: 86400 segundos (um dia). Um valor de -1 significa que os dados nunca expiram. Quando o período de retenção de dados excede o TTL, o sistema limpa automaticamente os dados expirados. Para mais informações sobre o gerenciamento do ciclo de vida do índice de pesquisa, consulte Gerenciamento de ciclo de vida. |
Exemplos
Criar um índice de pesquisa com configurações padrão
O exemplo a seguir cria um índice de pesquisa contendo três colunas: Col_Keyword (tipo KEYWORD), Col_Long (tipo LONG) e Col_Vector (tipo VECTOR). Os dados são pré-ordenados pela chave primária da tabela de dados e nunca expiram.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Set the field name and type.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG),
// Set the vector type.
new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true)
// The vector dimension is 4, and the similarity algorithm is dot product.
.setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.DOT_PRODUCT))
));
request.setIndexSchema(indexSchema);
// Call the client to create the search index.
client.createSearchIndex(request);
}
Criar um índice de pesquisa e especificar IndexSort
O exemplo a seguir cria um índice de pesquisa contendo quatro colunas: Col_Keyword (tipo KEYWORD), Col_Long (tipo LONG), Col_Text (tipo TEXT) e Timestamp (tipo LONG). Os dados são pré-ordenados pela coluna Timestamp.
private static void createSearchIndexWithIndexSort(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG),
new FieldSchema("Col_Text", FieldType.TEXT),
new FieldSchema("Timestamp", FieldType.LONG)
.setEnableSortAndAgg(true)));
// Set presorting by the Timestamp column.
indexSchema.setIndexSort(new Sort(
Arrays.<Sort.Sorter>asList(new FieldSort("Timestamp", SortOrder.ASC))));
request.setIndexSchema(indexSchema);
// Call the client to create the search index.
client.createSearchIndex(request);
}
Criar um índice de pesquisa e definir o TTL
Certifique-se de que a operação UpdateRow esteja desativada para a tabela de dados.
O exemplo a seguir cria um índice de pesquisa contendo duas colunas: Col_Keyword (tipo KEYWORD) e Col_Long (tipo LONG). O TTL do índice de pesquisa está definido para 7 dias.
// Use Tablestore SDK for Java 5.12.0 or later.
public static void createIndexWithTTL(SyncClient client) {
int days = 7;
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Set the field name and type.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG)));
request.setIndexSchema(indexSchema);
// Set the TTL for the search index.
request.setTimeToLiveInDays(days);
// Call the client to create the search index.
client.createSearchIndex(request);
}
Criar um índice de pesquisa e especificar colunas virtuais
O exemplo a seguir cria um índice de pesquisa contendo duas colunas: Col_Keyword (tipo KEYWORD) e Col_Long (tipo LONG). O índice também inclui duas colunas virtuais: Col_Keyword_Virtual_Long (tipo LONG), mapeada para a coluna Col_Keyword na tabela de dados, e Col_Long_Virtual_Keyword (tipo KEYWORD), mapeada para a coluna Col_Long na tabela de dados.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Set the field name and type.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
// Set the field name and type.
new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG)
// Specify whether the field is a virtual column.
.setVirtualField(true)
// The corresponding field in the data table for the virtual column.
.setSourceFieldName("Col_Keyword"),
new FieldSchema("Col_Long", FieldType.LONG),
new FieldSchema("Col_Long_Virtual_Keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("Col_Long")));
request.setIndexSchema(indexSchema);
// Call the client to create the search index.
client.createSearchIndex(request);
}
Ativar resumo e destaque ao criar um índice de pesquisa
O exemplo a seguir cria um índice de pesquisa contendo três colunas: Col_Keyword (tipo KEYWORD), Col_Long (tipo LONG) e Col_Text (tipo TEXT). O recurso de resumo e destaque está ativado para a coluna Col_Text.
private static void createSearchIndexWithHighlighting(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// Set the data table name.
request.setTableName("<TABLE_NAME>");
// Set the search index name.
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// Set the field name and type.
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
new FieldSchema("Col_Long", FieldType.LONG),
// Enable the summary and highlighting feature for the field.
new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setEnableHighlighting(true)
));
request.setIndexSchema(indexSchema);
// Call the client to create the search index.
client.createSearchIndex(request);
}
FAQ
Diferenças entre consultas de intervalo usando as operações GetRange e Search
O Tablestore suporta o armazenamento de dados no formato JSON?
Dados não podem ser encontrados usando a operação Search de um índice de pesquisa
O Tablestore suporta consultas semelhantes a IN e BETWEEN...AND em bancos de dados relacionais?
O erro "field:xx must enable enable_sort_and_agg" ocorre ao usar um índice de pesquisa
Referências
Após criar um índice de pesquisa, selecione um tipo de consulta apropriado para consultas de dados multidimensionais. Os tipos de consulta de índice de pesquisa incluem Consulta de termo, Consulta de termos, Consulta match all, Consulta match, Consulta match phrase, Consulta de prefixo, Consulta de sufixo, Consulta de intervalo, Consulta curinga, Consulta geográfica, Consulta booleana, Pesquisa vetorial, Consulta aninhada e Consulta exists.
Ao consultar dados, aplique operações de ordenação e paginação, destaque ou colapso (deduplicação) no conjunto de resultados.
Depois de criar um índice de pesquisa, gerencie-o conforme necessário. As operações de gerenciamento incluem modificar dinamicamente um esquema, Gerenciamento de ciclo de vida, listar índices de pesquisa, consultar descrições de índices de pesquisa e excluir um índice de pesquisa.
Para realizar análises de dados, como encontrar o valor máximo ou mínimo, calcular uma soma ou contar linhas, use o recurso de agregação ou o recurso de consulta SQL.
Para exportar dados rapidamente sem preservar a ordem de todo o conjunto de resultados, utilize o recurso de varredura paralela.