Todos os produtos
Search
Central de documentação

Tablestore:Crie um índice de pesquisa

Última atualização: Jul 03, 2026

Use o método CreateSearchIndex para criar um índice de pesquisa em uma tabela de dados. Uma tabela pode ter vários índices de pesquisa. Ao criar um índice, adicione os campos que deseja consultar. Também é possível configurar opções avançadas, como campos de roteamento e pré-ordenação.

Pré-requisitos

  • Cliente do Tablestore inicializado. Para mais informações, consulte Inicializar o cliente do Tablestore.

  • Tabela de dados criada que atenda aos seguintes requisitos. Para mais informações, consulte Criar uma tabela de dados.

    • Número máximo de versões definido como 1.

    • Tempo de vida (TTL) definido como -1 ou atualizações desativadas para a tabela de dados.

Observações de uso

  • O tipo de dados de um campo no índice de pesquisa deve corresponder ao tipo de dados do campo equivalente na tabela de dados.

  • Para definir um TTL diferente de -1 no índice de pesquisa, desative as atualizações na tabela de dados. O TTL do índice de pesquisa deve ser menor ou igual ao TTL da tabela. Para mais informações, consulte Gerenciamento de ciclo de vida.

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 parâmetro IndexSchema inclui FieldSchemas (configurações de campo), IndexSetting (configurações do índice) e IndexSort (configurações de pré-ordenação). A tabela a seguir descreve esses parâmetros.

Parâmetro

Descrição

TableName

Nome da tabela de dados.

IndexName

Nome do índice de pesquisa.

FieldSchemas

Lista de objetos FieldSchema. Cada objeto contém os seguintes parâmetros:

  • FieldName (Obrigatório): Nome do campo no índice de pesquisa. O valor corresponde a um nome de coluna. Tipo: String.

    Um campo no índice de pesquisa pode ser uma coluna de chave primária ou de atributo.

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

  • Array (Opcional): Define se o campo é um array. Tipo: Boolean.

    Se definido como true, a coluna armazena dados de array. Grave os dados no formato de array JSON, como ["a","b","c"].

    Campos aninhados são inerentemente arrays. 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.

    Valor padrão: true. Cria um índice invertido ou espacial para a coluna. Se definido como false, nenhum índice será criado.

  • Analyzer (Opcional): Tipo de tokenizador. Defina este parâmetro quando o tipo de campo for Text. Valor padrão: tokenização de palavra única.

  • EnableSortAndAgg (Opcional): Define se a ordenação e a agregação devem ser ativadas. Tipo: Boolean.

    Somente campos com EnableSortAndAgg definido como true oferecem suporte à ordenação.

    Importante

    Campos do tipo Nested não suportam ordenação e agregação. No entanto, subcolunas dentro de um campo Nested oferecem suporte a esses recursos.

  • DateFormats (Opcional): Formato da data. Tipo: String. Defina este parâmetro quando o tipo de campo for Date. Para mais informações, consulte Tipos de data e hora.

  • EnableHighlighting (Opcional): Define se o recurso de resumo e destaque deve ser ativado. Tipo: Boolean. Valor padrão: false. Defina como true para ativar o recurso. Apenas campos Text oferecem suporte a essa funcionalidade.

  • VectorOptions (Opcional): Parâmetros de propriedade para um campo vetorial. Defina este parâmetro quando o tipo de campo for Vector. Inclui os seguintes parâmetros:

    • DataType: Tipo de dados do vetor. Atualmente, apenas float32 é suportado. Para usar outros tipos, abra um ticket para entrar em contato conosco.

    • Dimension: Número de dimensões do vetor. Valor máximo: 4096.

    • MetricType: Algoritmo de medida de distância para vetores. Valores válidos: distância euclidiana (euclidean), similaridade de cosseno (cosine) e produto escalar (dot_product).

      • Distância euclidiana (euclidean): Mede a distância em linha reta entre dois vetores em um espaço multidimensional. Por motivos de desempenho, o algoritmo no Tablestore não executa o cálculo final da raiz quadrada. Uma pontuação maior indica maior similaridade entre os vetores.

      • Similaridade de cosseno (cosine): Mede o cosseno do ângulo entre dois vetores. Uma pontuação maior indica maior similaridade. Este algoritmo é comum para dados de texto.

      • Produto escalar (dot_product): Calcula a soma dos produtos das coordenadas correspondentes de dois vetores com a mesma dimensão. Uma pontuação maior indica maior similaridade entre os vetores.

      Para mais informações sobre como selecionar um algoritmo de medida de distância, consulte Algoritmos de medida de distância.

  • JsonType (Opcional): Tipo de índice para dados JSON. Valores válidos: OBJECT e NESTED. Defina este parâmetro quando o tipo de campo for JSON.

IndexSetting

Configurações do índice. Inclui a configuração RoutingFields.

RoutingFields (Opcional): Campos de roteamento personalizados. Selecione algumas colunas de chave primária como campos de roteamento. Normalmente, basta definir apenas um. Se houver várias chaves de roteamento, o sistema concatenará seus valores em um único valor.

Ao gravar dados no índice, o sistema determina a partição com base nos valores dos campos de roteamento. Registros com os mesmos valores de campo de roteamento ficam armazenados na mesma partição de dados.

IndexSort

Configurações de pré-ordenação do índice. Inclui a configuração Sorters. Padrão: ordenação por chave primária.

Nota

Índices de pesquisa com campos do tipo Nested não suportam IndexSort nem possuem pré-ordenação.

Sorters (Obrigatório): Método de pré-ordenação para o índice. Suporta ordenação por chave primária ou por valor de campo. Para mais informações, consulte Ordenação e paginação.

  • PrimaryKeySort: Ordena pela chave primária. Inclui a seguinte configuração:

    Order: Ordem de classificação. Valores válidos: ascendente e descendente. Valor padrão: ascendente.

  • FieldSort: Ordena pelo valor do campo. Inclui as seguintes configurações:

    A pré-ordenação exige que o campo esteja indexado e com ordenação e agregação ativadas.

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

    • Order: Ordem de classificação. Valores válidos: ascendente e descendente. Valor padrão: ascendente.

    • 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. Unidade: segundos.

Valor padrão: -1 (dados nunca expiram). Valor mínimo: 86400 (um dia). Defina como -1 para evitar a expiração dos dados.

O Tablestore exclui automaticamente os dados expirados assim que o período de retenção ultrapassa o TTL.

Para mais informações sobre o 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 com três colunas: col_keyword (tipo Keyword), col_long (tipo Long) e col_vector (tipo Vector).

func createSearchIndex(client *tablestore.TableStoreClient) {
    request := &tablestore.CreateSearchIndexRequest{}
    request.TableName = "<TABLE_NAME>"
    request.IndexName = "<SEARCH_INDEX_NAME>"
    request.IndexSchema = &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{
            {
                FieldName:        proto.String("col_keyword"),
                FieldType:        tablestore.FieldType_KEYWORD, // String type
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
            {
                FieldName:        proto.String("col_long"),
                FieldType:        tablestore.FieldType_LONG, // Numeric type
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
            {
                FieldName: proto.String("col_vector"),
                FieldType: tablestore.FieldType_VECTOR, // Vector type
                Index:     proto.Bool(true),
                VectorOptions: &tablestore.VectorOptions{
                    VectorDataType:   tablestore.VectorDataType_FLOAT_32.Enum(),
                    Dimension:        proto.Int32(4), // The vector dimension is 4, and the similarity algorithm is dot product.
                    VectorMetricType: tablestore.VectorMetricType_DOT_PRODUCT.Enum(),
                },
            },
        },
    }
    _, err := client.CreateSearchIndex(request)
    if err != nil {
        fmt.Println("Failed to create searchIndex with error:", err)
        return
    }
}

Criar um índice de pesquisa com IndexSort

O exemplo a seguir cria um índice de pesquisa com pré-ordenação configurada. O índice contém duas colunas: col1 (tipo Keyword) e col2 (tipo Long).

func createSearchIndex_withIndexSort(client *tablestore.TableStoreClient){
    request := &tablestore.CreateSearchIndexRequest{}
    request.TableName = "<TABLE_NAME>" // Set the table name.
    request.IndexName = "<SEARCH_INDEX_NAME>" // Set the search index name.

    schemas := []*tablestore.FieldSchema{}
    field1 := &tablestore.FieldSchema{
        FieldName: proto.String("col1"), // Set the field name. Use proto.String to get the string pointer.
        FieldType: tablestore.FieldType_KEYWORD, // Set the field type.
        Index:     proto.Bool(true), // Enable indexing.
        EnableSortAndAgg: proto.Bool(true), // Enable sorting and statistical aggregation.
    }
    field2 := &tablestore.FieldSchema{
        FieldName: proto.String("col2"),
        FieldType: tablestore.FieldType_LONG,
        Index:     proto.Bool(true),
        EnableSortAndAgg: proto.Bool(true),
    }

    schemas = append(schemas, field1, field2)
    request.IndexSchema = &tablestore.IndexSchema{
        FieldSchemas: schemas, // Set the fields to include in the search index.
        IndexSort: &search.Sort{ // Specify index pre-sorting. Sort by col2 in ascending order, then by col1 in descending order.
            Sorters: []search.Sorter{
                &search.FieldSort{
                    FieldName: "col2",
                    Order:     search.SortOrder_ASC.Enum(),
                },
                &search.FieldSort{
                    FieldName: "col1",
                    Order:     search.SortOrder_DESC.Enum(),
                },
            },
        },
    }
    resp, err := client.CreateSearchIndex(request) // Call the client to create the search index.
    if err != nil {
        fmt.Println("error :", err)
        return
    }
    fmt.Println("CreateSearchIndex finished, requestId:", resp.ResponseInfo.RequestId)
}

Criar um índice de pesquisa com TTL

Importante

Certifique-se de que as atualizações estejam desativadas para a tabela de dados.

func createIndexWithTTL(client *tablestore.TableStoreClient) {
    request := &tablestore.CreateSearchIndexRequest{}
    request.TableName = "<TABLE_NAME>"
    request.IndexName = "<SEARCH_INDEX_NAME>"
    schemas := []*tablestore.FieldSchema{}
    field1 := &tablestore.FieldSchema{
        FieldName:        proto.String("col1"),         // Set the field name. Use proto.String to get the string pointer.
        FieldType:        tablestore.FieldType_KEYWORD, // Set the field type.
        Index:            proto.Bool(true),             // Enable indexing.
        EnableSortAndAgg: proto.Bool(true),             // Enable sorting and statistical aggregation.
    }
    field2 := &tablestore.FieldSchema{
        FieldName:        proto.String("col2"),
        FieldType:        tablestore.FieldType_LONG,
        Index:            proto.Bool(true),
        EnableSortAndAgg: proto.Bool(true),
    }
    schemas = append(schemas, field1, field2)
    request.IndexSchema = &tablestore.IndexSchema{
        FieldSchemas: schemas, // Set the fields to include in the search index.
    }
    request.TimeToLive = proto.Int32(3600 * 24 * 7) // Set the TTL of the search index to 7 days.
    resp, err := client.CreateSearchIndex(request)
    if err != nil {
       fmt.Println("error :", err)
       return
   }
    fmt.Println("createIndexWithTTL finished, requestId:", resp.ResponseInfo.RequestId)
}

Criar um índice de pesquisa com destaque de consulta

O exemplo a seguir cria um índice de pesquisa com quatro colunas: col_keyword (tipo Keyword), col_long (tipo Long), col_text (tipo Text) e col_nested (tipo Nested). A coluna col_nested contém duas subcolunas: level1_text (tipo Text) e level1_nested (tipo Nested). A subcoluna level1_nested contém uma subcoluna: level2_text (tipo Text). O destaque de consulta está ativado para col_text, para a subcoluna level1_text de col_nested e para a subcoluna level2_text de col_nested.level1_nested.

func createSearchIndexwithHighlighting(client *tablestore.TableStoreClient) {
    request := &tablestore.CreateSearchIndexRequest{}
    request.TableName = "<TABLE_NAME>"
    request.IndexName = "<SEARCH_INDEX_NAME>"
    request.IndexSchema = &tablestore.IndexSchema{
        FieldSchemas: []*tablestore.FieldSchema{
            {
                FieldName:        proto.String("col_keyword"),
                FieldType:        tablestore.FieldType_KEYWORD, // String type.
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
            {
                FieldName:        proto.String("col_long"),
                FieldType:        tablestore.FieldType_LONG, // Numeric type.
                Index:            proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
            },
            {// Enable query highlighting for a non-nested type.
                FieldName: proto.String("col_text"),
                FieldType: tablestore.FieldType_TEXT, // Tokenizable string type.
                Index:     proto.Bool(true),
                EnableSortAndAgg: proto.Bool(true),
                EnableHighlighting: proto.Bool(true),
            },
            {// Enable query highlighting for sub-columns in a nested type field.
                FieldName: proto.String("col_nested"),
                FieldType: tablestore.FieldType_NESTED,
                FieldSchemas: []*tablestore.FieldSchema{
                    {
                        FieldName:          proto.String("level1_text"),
                        FieldType:          tablestore.FieldType_TEXT,
                        Index:              proto.Bool(true),
                        EnableHighlighting: proto.Bool(true),
                    },
                    {
                        FieldName: proto.String("level1_nested"),
                        FieldType: tablestore.FieldType_NESTED,
                        FieldSchemas: []*tablestore.FieldSchema{
                            {
                                FieldName:          proto.String("level2_text"),
                                FieldType:          tablestore.FieldType_TEXT,
                                Index:              proto.Bool(true),
                                EnableHighlighting: proto.Bool(true),
                            },
                        },
                    },
                },
            },
        },
    }
    _, err := client.CreateSearchIndex(request)
    if err != nil {
        fmt.Println("Failed to create searchIndex with error:", err)
        return
    }
}

Perguntas frequentes

Referências