Todos os produtos
Search
Central de documentação

Tablestore:Create a search index

Ú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 o índice, adicione os campos que deseja consultar. Também é possível configurar opções avançadas, como chaves de roteamento personalizadas e pré-ordenação.

Pré-requisitos

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

  • Uma tabela de dados foi criada e atende às seguintes condições:

    • 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 estão desativadas.

Observações de uso

  • Ao criar um índice de pesquisa, o tipo de dados de cada campo no índice deve corresponder ao tipo de dados do campo equivalente na tabela de dados.

  • Para definir um TTL específico para o índice de pesquisa (valor diferente de -1), desative o recurso de gravação UpdateRow na tabela de dados. O TTL do índice de pesquisa deve ser menor ou igual ao TTL da tabela. Para mais detalhes, consulte Gerenciamento de ciclo de vida.

Parâmetros

Ao criar um índice de pesquisa, especifique o nome da tabela (table_name), o nome do índice de pesquisa (index_name) e o esquema do índice (schema). O esquema inclui esquemas de campos (field_schemas), configurações de índice (index_setting) e definições de pré-ordenação (index_sort). A tabela a seguir descreve esses parâmetros.

Parâmetro

Descrição

table_name

Nome da tabela de dados.

index_name

Nome do índice de pesquisa.

field_schemas

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

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

    O campo pode ser uma coluna de chave primária ou uma coluna de atributo.

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

  • is_array (Opcional): Define se o campo é um array. Tipo de dados: Boolean.

    Se este parâmetro for definido como True, a coluna armazena um array. Os dados gravados na coluna devem estar no formato de array JSON, como ["a","b","c"].

    Como o tipo Nested é inerentemente um array, não é necessário definir este parâmetro quando field_type for Nested.

  • index (Opcional): Define se a indexação deve ser ativada para o campo. Tipo de dados: Boolean.

    Valor padrão: True. O valor True indica a criação de um índice invertido ou espacial para a coluna. O valor False indica que nenhum índice será criado.

  • analyzer (Opcional): Tipo de tokenizador. Este parâmetro é válido apenas quando o tipo de campo é Text. Valor padrão: tokenização de palavra única.

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

    Apenas campos com enable_sort_and_agg definido como True podem ser usados para ordenação.

    Importante

    Campos Nested não suportam ordenação e agregação. No entanto, subcolunas dentro de um campo Nested oferecem suporte a esse recurso.

  • sub_field_schemas (Opcional): Tipos de índice para subcolunas em um documento aninhado. Este parâmetro é obrigatório quando o tipo de campo é Nested. Tipo de dados: lista de objetos field_schema.

  • is_virtual_field (Opcional): Define se o campo é uma coluna virtual. Tipo de dados: Boolean. Valor padrão: False. Para utilizar uma coluna virtual, defina este parâmetro como True.

  • source_field_name (Opcional): Nome do campo source na tabela de dados. Tipo de dados: String.

    Importante

    Este parâmetro é obrigatório quando is_virtual_field está definido como True.

  • date_formats (Opcional): Formato da data. Tipo de dados: String. Para mais informações, consulte Tipos de data e hora.

    Importante

    Este parâmetro é obrigatório quando o tipo de campo é Date.

  • enable_highlighting (Opcional): Define se o recurso de resumo e destaque deve ser ativado. Tipo de dados: Boolean. Valor padrão: False. Para ativar o resumo e destaque, defina este parâmetro como True. Esse recurso é suportado apenas para campos Text.

    Importante

    Este recurso está disponível no Tablestore Python SDK 6.0.0 e versões posteriores.

  • vector_options (Opcional): Parâmetros de propriedade para um campo vetorial. Este parâmetro é obrigatório quando o tipo de campo é Vector. Inclui as seguintes configurações:

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

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

    • metric_type: Algoritmo usado para medir a distância entre vetores. Valores válidos: euclidean (distância euclidiana), cosine (similaridade de cosseno) e dot_product (produto escalar).

      • 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 de distância euclidiana no Tablestore não executa o cálculo final da raiz quadrada. Uma pontuação maior indica maior similaridade entre os dois vetores.

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

      • Produto escalar (dot_product): Multiplica as coordenadas correspondentes de dois vetores de mesma dimensão e soma os resultados. Uma pontuação mais alta indica maior similaridade.

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

  • json_type (Opcional): Tipo de índice para dados JSON. Valores válidos: OBJECT e NESTED. Este parâmetro é obrigatório quando o tipo de campo é JSON.

index_setting

Configurações do índice, incluindo a definição routing_fields.

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

Quando os dados do índice são gravados, o sistema determina a partição de dados com base nos valores dos campos de roteamento. Registros com os mesmos valores de campo de roteamento são distribuídos para a mesma partição de dados.

index_sort

Configurações de pré-ordenação do índice, incluindo a definição sorters. Se você não configurar este parâmetro, os dados serão ordenados pela chave primária por padrão.

Nota

Índices de pesquisa que contêm campos Nested não suportam pré-ordenação de índice (indexSort).

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

  • PrimaryKeySort: Ordena os dados pela chave primária. Este método inclui a seguinte configuração:

    sort_order: Ordem de classificação. Valores válidos: SortOrder.ASC (ascendente, padrão) e SortOrder.DESC (descendente).

  • FieldSort: Ordena os dados pelo valor do campo. Este método inclui as seguintes configurações:

    Apenas campos indexados e com ordenação e agregação ativadas podem ser usados para pré-ordenação.

    • field_name: Nome do campo utilizado para ordenação.

    • sort_order: Ordem de classificação. Valores válidos: SortOrder.ASC (ascendente, padrão) e SortOrder.DESC (descendente).

    • sort_mode: Modo de ordenação aplicado quando um campo contém múltiplos valores.

Exemplos

Especificar analisadores ao criar um índice de pesquisa

O código de exemplo a seguir cria um índice de pesquisa com analisadores configurados. O índice contém seis campos: k (Keyword), t (Text), g (Geopoint), ka (array de Keyword), la (array de Long) e n (Nested). O campo n possui três subcampos: nk (Keyword), nl (Long) e nt (Text).

def create_search_index(client):
    # A Keyword field. Create an index and enable statistical aggregation.
    field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
    # A Text field. Create an index and use single-word tokenization.
    field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD)
    # A Text field. Create an index and use fuzzy tokenization.
    #field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.FUZZY,analyzer_parameter=FuzzyAnalyzerParameter(1, 6))
    # A Text field. Create an index and use a custom separator (a comma) for tokenization.
    #field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SPLIT, analyzer_parameter = SplitAnalyzerParameter(","))
    # A Geopoint field. Create an index.
    field_c = FieldSchema('g', FieldType.GEOPOINT, index=True)
    # A Keyword array field. Create an index.
    field_d = FieldSchema('ka', FieldType.KEYWORD, index=True, is_array=True)
    # A Long array field. Create an index.
    field_e = FieldSchema('la', FieldType.LONG, index=True, is_array=True)

    # A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text).
    field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
        FieldSchema('nk', FieldType.KEYWORD, index=True),
        FieldSchema('nl', FieldType.LONG, index=True),
        FieldSchema('nt', FieldType.TEXT, index=True),
    ])

    fields = [field_a, field_b, field_c, field_d, field_e, field_n]

    index_setting = IndexSetting(routing_fields=['PK1']) 
    index_sort = None # When a search index contains a Nested field, you cannot set index pre-sorting.
    #index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
    index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
    client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)

Criar um índice de pesquisa e configurar campos vetoriais

O código de exemplo a seguir cria um índice de pesquisa com campos vetoriais configurados. O índice contém três campos: col_keyword (Keyword), col_long (Long) e col_vector (Vector). O algoritmo de medida de distância para o campo vetorial é o produto escalar.

def create_search_index(client):
    index_meta = SearchIndexMeta([
        FieldSchema('col_keyword', FieldType.KEYWORD, index=True, enable_sort_and_agg=True),  # String type
        FieldSchema('col_long', FieldType.LONG, index=True),  # Numeric type
        FieldSchema("col_vector", FieldType.VECTOR,  # Vector type
                    vector_options=VectorOptions(
                        data_type=VectorDataType.VD_FLOAT_32,
                        dimension=4,  # The vector dimension is 4, and the similarity algorithm is dot product.
                        metric_type=VectorMetricType.VM_DOT_PRODUCT
                    )),

    ])
    client.create_search_index(table_name, index_name, index_meta)

Ativar resumo e destaque ao criar um índice de pesquisa

O código de exemplo a seguir cria um índice de pesquisa com resumo e destaque ativados. O índice contém três campos: k (Keyword), t (Text) e n (Nested). O campo n possui três subcampos: nk (Keyword), nl (Long) e nt (Text). O recurso de resumo e destaque está habilitado para o campo t e para o subcampo nt do campo n.

def create_search_index0905(client):
    # A Keyword field. Create an index and enable statistical aggregation.
    field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
    # A Text field. Create an index, use single-word tokenization, and enable summary and highlighting for the field.
    field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD,
                        enable_highlighting=True)

    # A Nested field that includes three sub-fields: nk (Keyword), nl (Long), and nt (Text). The summary and highlighting feature is enabled for the nt sub-column.
    field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
        FieldSchema('nk', FieldType.KEYWORD, index=True),
        FieldSchema('nl', FieldType.LONG, index=True),
        FieldSchema('nt', FieldType.TEXT, index=True, enable_highlighting=True),
    ])

    fields = [field_a, field_b, field_n]

    index_setting = IndexSetting(routing_fields=['id'])
    index_sort = None  # When a search index contains a Nested field, you cannot set index pre-sorting.
    # index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
    index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
    client.create_search_index('pythontest', 'pythontest_0905', index_meta)

Perguntas frequentes

Referências