Todos os produtos
Search
Central de documentação

Tablestore:Crie um índice de pesquisa

Última atualização: Jun 30, 2026

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:

  • fieldName (Obrigatório): Nome do campo a ser indexado, correspondente ao nome da coluna. Tipo: String.

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

  • fieldType (Obrigatório): Tipo de dado do campo. Especifique o tipo no formato FieldType.XXX.

    Nota
    • Para armazenar e consultar dados com relações lógicas multicamadas, use o tipo Nested.

    • Para armazenar e consultar dados no formato JSON, armazene-os como strings na tabela de dados. Em seguida, use os tipos array e Nested no índice de pesquisa para consultar os dados JSON com flexibilidade.

    • Para aplicações que exigem consultas geográficas, use o tipo de campo Geo-point para armazenar os dados.

  • index (Opcional): Define se um índice será criado para o campo. Tipo: Boolean.

    Valor padrão: true, indicando a criação de um índice invertido ou espacial para o campo. Se definido como false, nenhum índice é criado para este campo.

  • enableHighlighting (Opcional): Define se o recurso de resumo e destaque será ativado. Tipo: Boolean. Valor padrão: false. Defina este parâmetro como true para ativar o resumo e o destaque. Apenas campos do tipo Text aceitam este recurso.

  • analyzer (Opcional): Tipo de tokenizador. Você pode definir este parâmetro para campos do tipo Text. Por padrão, usa-se a tokenização de palavra única.

  • analyzerParameter (Opcional): Configurações de parâmetros para o tokenizador. Configure os parâmetros com base no tipo de tokenizador. Este parâmetro é obrigatório se o parâmetro analyzer estiver definido.

  • enableSortAndAgg (Opcional): Define se a ordenação e a agregação serão ativadas. Tipo: Boolean. Valor padrão: true.

    Apenas campos com enableSortAndAgg definido como true aceitam ordenação.

    Importante

    Campos do tipo Text não aceitam ordenação e agregação. Para ordenar ou agregar dados em um campo Text, crie uma coluna virtual do tipo Keyword. Para mais informações, consulte Colunas virtuais.

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

    Se definido como true, o campo é um array. Os dados gravados no campo devem estar no formato de array JSON, como ["a","b","c"].

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

  • subFieldSchemas (Opcional): Tipos de índice para as subcolunas de um campo Nested. Tipo: Lista de FieldSchema.

  • isVirtualField (Opcional): Define se o campo é uma coluna virtual. Tipo: Boolean. Valor padrão: false. Defina este parâmetro como true para usar uma coluna virtual.

  • sourceFieldName (Opcional): Nome do campo de origem na tabela de dados. Tipo: String. Obrigatório quando isVirtualField está definido como true.

  • dateFormats (Opcional): Formato da data. Tipo: String. Obrigatório para campos do tipo Date. Para mais informações, consulte Tipos de data e hora.

  • vectorOptions (Opcional): Propriedades do campo vetorial. Obrigatório para campos do tipo Vector. Este parâmetro inclui os seguintes subparâmetros:

    • dataType: Tipo de dado do vetor. Apenas float32 é suportado. Para requisitos de outros tipos de dados, abra um ticket.

    • dimension: Número de dimensões do vetor. Máximo: 4.096.

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

      • Distância euclidiana (euclidean): 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 realiza o cálculo final da raiz quadrada. Uma pontuação maior de distância euclidiana indica maior similaridade entre os dois vetores.

      • Similaridade de cosseno (cosine): Cosseno do ângulo entre dois vetores em um espaço vetorial. Uma pontuação maior de similaridade de cosseno indica maior similaridade entre os dois vetores. Esta métrica é comum para calcular a similaridade de dados textuais.

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

      Para obter informações sobre como selecionar um algoritmo de métrica de distância, consulte Algoritmos de métrica de distância.

  • jsonType (Opcional): Tipo de índice para dados JSON. Valores válidos: OBJECT e NESTED. Obrigatório quando o tipo de campo é JSON.

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.

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

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

  • FieldSort ordena os dados pelo valor do campo. Apenas campos indexados com ordenação e agregação ativadas aceitam pré-ordenação. Inclui as seguintes configurações:

    • fieldName: Nome do campo pelo qual ordenar.

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

    • mode: Método de ordenação a ser usado quando um campo possui múltiplos valores.

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

Importante

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

Referências