Crie um ou mais índices de pesquisa para uma tabela de dados com o método CreateSearchIndex. Ao criar um índice de pesquisa, especifique os campos a consultar e, opcionalmente, configure opções avançadas, como chaves de roteamento personalizadas e pré-ordenação.
Pré-requisitos
Antes de começar, verifique se:
O cliente do Tablestore está inicializado. Para obter mais informações, consulte Inicializar o cliente do Tablestore.
-
Uma tabela de dados foi criada e atende às seguintes condições. Para obter mais informações, consulte Criar uma tabela de dados.
O número máximo de versões está definido como 1.
O tempo de vida (TTL) está definido como -1 ou as atualizações da tabela de dados estão desativadas.
Compatibilidade de tipos de campo
O tipo de dados de cada campo no índice de pesquisa deve corresponder ao tipo de dados do campo equivalente na tabela de dados.
Parâmetros
Para criar um índice de pesquisa, especifique o nome da tabela (TableName), o nome do índice de pesquisa (IndexName) e o esquema do índice (IndexSchema). O IndexSchema contém FieldSchemas (configurações de campo), IndexSetting (configurações de índice) e IndexSort (configurações de pré-ordenação).
|
Parâmetro |
Descrição |
|
TableName |
Nome da tabela de dados. |
|
IndexName |
Nome do índice de pesquisa. |
|
FieldSchemas |
Lista de objetos FieldSchema. Cada objeto FieldSchema contém os seguintes parâmetros:
|
|
IndexSetting |
Configurações do índice. Contém o seguinte parâmetro: RoutingFields (Opcional): Campos de roteamento personalizados. Selecione uma ou mais colunas de chave primária como campos de roteamento. Na maioria dos casos, um único campo de roteamento basta. Se você definir várias chaves de roteamento, o sistema concatenará seus valores em um único valor. Registros com os mesmos valores de campo de roteamento são indexados na mesma partição de dados. |
|
IndexSort |
Configurações de pré-ordenação para o índice. Se não especificado, os dados são ordenados pela chave primária por padrão. Índices com campos Nested não suportam IndexSort. Sorters (Obrigatório): Método de pré-ordenação. Suporta ordenação por chave primária ou por valor de campo. Para obter mais informações, consulte Ordenação e paginação.
|
|
TimeToLive |
Opcional. Tempo de vida (TTL) dos dados no índice de pesquisa, em segundos. Padrão: -1 (os dados nunca expiram). Valor mínimo: 86400 segundos (um dia). O sistema limpa automaticamente os dados expirados quando o período de retenção excede o TTL configurado. |
Exemplos
Criar um índice de pesquisa com configurações padrão
Crie um índice de pesquisa com três campos: Keyword_type_col (Keyword), Long_type_col (Long) e Text_type_col (Text), com ordenação e agregação ativadas nos campos Keyword e Long.
/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
// Set the table name and search index name.
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
index = true, // Enable indexing.
EnableSortAndAgg = true // Enable sorting and aggregation.
},
new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
};
request.IndexSchame = new IndexSchema()
{
FieldSchemas = FieldSchemas
};
// Create the search index.
CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
Console.WriteLine("Searchindex is created: " + IndexName);
}
Criar um índice de pesquisa e especificar IndexSort
Crie um índice de pesquisa com três campos: Keyword_type_col (Keyword), Long_type_col (Long) e Text_type_col (Text). Pré-ordene os resultados pelo campo Long_type_col em ordem crescente.
/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// Pre-sorts results by Long_type_col in ascending order.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
// Set the table name and search index name.
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
index = true,
EnableSortAndAgg = true
},
new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
};
request.IndexSchame = new IndexSchema()
{
FieldSchemas = FieldSchemas,
// Pre-sort by Long_type_col (ascending). The field must have EnableSortAndAgg enabled.
IndexSort = new DataModel.Search.Sort.Sort()
{
Sorters = new List<DataModel.Search.Sort.ISorter>
{
new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
}
}
};
CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
Console.WriteLine("Searchindex is created: " + IndexName);
}
Criar um índice de pesquisa que contém uma coluna de data e uma coluna virtual
Crie um índice de pesquisa com cinco campos: pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point) e col0_v1 (Text). A coluna virtual col0_v1 mapeia para a coluna de source col0. Os resultados são pré-ordenados por pk1 em ordem crescente.
/// <summary>
/// Creates a search index that includes a Date field and a virtual column.
/// The virtual column col0_v1 maps to the source column col0 in the data table.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
List<FieldSchema> fieldSchemas = new List<FieldSchema> {
new FieldSchema("pk0", FieldType.KEYWORD)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("pk1", FieldType.LONG)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("date_col", FieldType.DATE)
{
index = true,
DateFormats = new List<string>(){
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSS"
}
},
new FieldSchema("geo_col", FieldType.GEO_POINT)
{
index = true,
EnableSortAndAgg = true
},
new FieldSchema("col0_v1", FieldType.TEXT)
{
index = true,
Analyzer = Analyzer.Split,
AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
IsVirtualField = true,
SourceFieldNames = new List<string> { "col0" } // Maps to source column col0.
},
};
CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
request.IndexSchame = new IndexSchema()
{
FieldSchemas = fieldSchemas,
IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
};
request.TimeToLive = -1; // Data never expires.
otsClient.CreateSearchIndex(request);
}
Perguntas frequentes
Próximos passos
Consulte o índice de pesquisa usando vários tipos de consulta para análise multidimensional de dados, incluindo consulta de termo, consulta de termos, consulta match all, consulta match, consulta match phrase, consulta de prefixo, consulta de intervalo, consulta com caractere curinga, consulta geográfica, consulta booleana, consulta aninhada e consulta exists.
Aplique ordenação e paginação ou colapso (deduplicação) aos resultados da consulta.
Gerencie índices de pesquisa: modifique dinamicamente o esquema, liste índices de pesquisa, consulte a descrição de um índice de pesquisa e exclua um índice de pesquisa.
Para análises como encontrar o valor máximo ou mínimo, calcular somas ou contar linhas, use o recurso de agregação estatística ou consulta SQL.
Para exportar dados rapidamente sem exigir uma ordem específica de resultados, utilize o recurso de varredura paralela.