Todos os produtos
Search
Central de documentação

Tablestore:Criar um índice de pesquisa

Última atualização: Jul 03, 2026

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:

  • FieldName (Obrigatório): Nome do campo no índice de pesquisa, correspondente a um nome de coluna. Tipo: String. O campo pode ser uma coluna de chave primária ou de atributo.

  • FieldType (Obrigatório): Tipo de dados do campo. Tipo: FieldType.XXX.

  • Array (Opcional): Define se o campo armazena dados de array. Tipo: Boolean. Quando definido como true, grave os dados no formato de array JSON, como ["a","b","c"]. O tipo Nested é inerentemente um array; não defina este parâmetro quando FieldType for Nested.

  • Index (Opcional): Define se a indexação deve ser ativada para o campo. Tipo: Boolean. Padrão: true. Quando ativado, cria-se um índice invertido ou espacial para a coluna. Defina como false para ignorar a indexação.

  • Analyzer (Opcional): Tipo de tokenizador. Aplica-se apenas quando FieldType é Text. Padrão: tokenização de palavra única.

  • EnableSortAndAgg (Opcional): Define se a ordenação e a agregação devem ser ativadas para o campo. Tipo: Boolean. Apenas campos com esta opção definida como true suportam ordenação. O tipo Nested não suporta ordenação e agregação, mas as subcolunas dentro de um campo Nested suportam.

  • IsVirtualField (Opcional): Define se o campo é uma coluna virtual. Tipo: Boolean. Padrão: false. Defina este parâmetro apenas para colunas virtuais.

  • SourceFieldNames (Opcional): Nomes das colunas de source na tabela de dados. Tipo: String. Obrigatório quando IsVirtualField é true.

  • DateFormats (Opcional): Formatos de data. Tipo: String. Obrigatório quando FieldType é Date. Para obter mais informações, consulte Tipos de data e hora.

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.

  • PrimaryKeySort: Ordena pela chave primária. Defina o parâmetro Order para especificar a ordem crescente ou decrescente. Padrão: crescente (DataModel.Search.Sort.SortOrder.ASC).

  • FieldSort: Ordena pelo valor do campo. Apenas campos indexados com ordenação e agregação ativadas podem ser usados para pré-ordenação. Contém as seguintes configurações:

    • FieldName: Nome do campo usado para ordenação.

    • Order: Ordem de classificação. Padrão: crescente (DataModel.Search.Sort.SortOrder.ASC).

    • Mode: Modo de ordenação quando um campo contém vários valores.

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