Todos os produtos
Search
Central de documentação

Tablestore:Criar um índice de pesquisa

Última atualização: Jul 03, 2026

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

Pré-requisitos

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

  • Tabela de dados criada que atenda às seguintes condições. Para obter 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 operação UpdateRow desativada para a tabela de dados.

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 definir o TTL de um índice de pesquisa com valor diferente de -1, desative a operação UpdateRow na tabela de dados. O TTL do índice de pesquisa deve ser menor ou igual ao TTL da tabela de dados. Para obter 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 (indexName) e o esquema do índice (schema). O esquema inclui esquemas de campo (fieldSchemas), configurações de índice (indexSetting) e definições de pré-ordenação do índice (indexSort).

Parâmetro

Descrição

tableName

Nome da tabela de dados.

indexName

Nome do índice de pesquisa.

fieldSchemas

Lista de esquemas de campo. Cada esquema contém os seguintes parâmetros:

  • fieldName (obrigatório): nome do campo a indexar. Corresponde ao nome da 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 dado do campo. Defina este parâmetro como TableStore.FieldType.XXX.

  • index (opcional): indica se a indexação está ativada. Tipo: Boolean.

    Valor padrão: true (cria um índice invertido ou espacial para a coluna). Defina como false para ignorar a indexação da coluna.

  • analyzer (opcional): tipo de tokenizador. Configure este parâmetro quando o tipo de campo for Text. Se omitido, usa-se a tokenização de palavra única por padrão.

  • analyzerParameter (opcional): configurações do tokenizador. Configure os parâmetros conforme o tipo de tokenizador. Obrigatório se o parâmetro analyzer estiver definido para o campo.

  • enableSortAndAgg (opcional): indica se a ordenação e a agregação estatística estão ativadas. Tipo: Boolean.

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

    Importante

    Campos Nested não suportam ordenação nem agregação estatística. Contudo, as subcolunas dentro de um campo Nested permitem essas operações.

  • isAnArray (opcional): indica se o campo é um array. Tipo: Boolean.

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

    Tipos Nested são inerentemente arrays; portanto, esse parâmetro é desnecessário quando fieldType é Nested.

  • fieldSchemas (opcional): quando o tipo de campo for Nested, use este parâmetro para definir os tipos de índice das subcolunas no documento aninhado. O valor é uma lista de esquemas de campo.

  • isVirtualField (opcional): indica se o campo é uma coluna virtual. Tipo: Boolean. Valor padrão: false. Defina como true para usar uma coluna virtual.

  • sourceFieldName (opcional): nome do campo source na tabela de dados. Tipo: String. Obrigatório se isVirtualField for true.

  • dateFormats (opcional): formato da data. Tipo: String. Obrigatório se o tipo de campo for Date. Para obter mais informações, consulte Tipos de dados de data e hora.

  • enableHighlighting (opcional): indica se o resumo e destaque estão ativados. Tipo: Boolean. Valor padrão: false. Defina como true para habilitar esse recurso. Apenas campos Text suportam destaque.

    Importante

    Este recurso é compatível com o Tablestore SDK for Node.js versão 5.5.0 ou posterior.

  • vectorOptions (opcional): propriedades do campo vetorial. Obrigatório para campos do tipo Vector. Inclui os seguintes parâmetros:

    • dataType: tipo de dado do vetor. Somente 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 de medição de distância para vetores. Algoritmos suportados: 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 espaço multidimensional. Por motivos de desempenho, o Tablestore ignora o cálculo final da raiz quadrada. Maior pontuação indica maior similaridade.

      • Similaridade de cosseno (cosine): mede o cosseno do ângulo entre dois vetores. Maior pontuação indica maior similaridade. Uso comum para dados textuais.

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

      Para orientações sobre a seleção de algoritmos de métrica de distância, consulte Algoritmos de métrica de distância.

indexSetting

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

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

Durante a gravação, o sistema distribui os dados do índice com base nos valores dos campos de roteamento. Registros com mesmos valores de campo de roteamento ficam na mesma partição de dados.

indexSort

Definições de pré-ordenação do índice, incluindo a configuração sorters. Se omitido, os dados serão ordenados pela chave primária por padrão.

Nota

Índices com campos Nested não suportam indexSort. Nenhuma pré-ordenação ocorre.

sorters (obrigatório): método de pré-ordenação do índice. 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. Inclui a seguinte configuração:

    order: ordem de classificação (crescente ou decrescente). Padrão: crescente (TableStore.SortOrder.SORT_ORDER_ASC).

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

    A pré-ordenação aplica-se apenas a campos indexados com ordenação e agregação estatística ativadas.

    • fieldName: nome do campo usado na ordenação.

    • order: ordem de classificação (crescente ou decrescente). Padrão: crescente (TableStore.SortOrder.SORT_ORDER_ASC).

    • mode: método de ordenação para campos com múltiplos valores.

timeToLive

Opcional. Tempo de vida (TTL) dos dados, correspondente ao período de retenção. Unidade: segundos.

Valor padrão: -1 (dados nunca expiram). O valor mínimo de TTL é 86400 segundos (um dia).

Quando o período de retenção excede o TTL, o sistema limpa automaticamente os dados expirados.

Exemplos

Criar um índice de pesquisa e definir um tokenizador

O exemplo a seguir cria um índice de pesquisa com as colunas: pic_id (Keyword), count (Long), time_stamp (Long), pic_description (Text), col_vector (Vector), pos (Geo-point), pic_tag (Nested), date (Date), analyzer_single_word (Text), analyzer_split (Text) e analyzer_fuzzy (Text). A coluna pic_tag possui dois subcampos: sub_tag_name (Keyword) e tag_name (Keyword). A coluna analyzer_single_word utiliza tokenização de palavra única; analyzer_split usa tokenização por delimitador; e analyzer_fuzzy emprega tokenização difusa.

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // Set the table name.
    indexName: "<INDEX_NAME>", // Set the search index name.
    schema: {
        fieldSchemas: [
            {
                fieldName: "pic_id",
                fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
                index: true, // Enable indexing.
                enableSortAndAgg: true, // Enable sorting and aggregation.
                isAnArray: false
            },
            {
                fieldName: "count",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false
            },
            {
                fieldName: "time_stamp",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "pic_description",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "col_vector",
                fieldType: TableStore.FieldType.VECTOR,
                index: true,
                isAnArray: false,
                vectorOptions: {
                    dataType: TableStore.VectorDataType.VD_FLOAT_32,
                    dimension: 4,
                    metricType: TableStore.VectorMetricType.VM_COSINE,
                }
            },
            {
                fieldName: "pos",
                fieldType: TableStore.FieldType.GEO_POINT,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
            },
            {
                fieldName: "pic_tag",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "sub_tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    }
                ]
            },
            {
                fieldName: "date",
                fieldType: TableStore.FieldType.DATE,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
                dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
            },
            {
                fieldName: "analyzer_single_word",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "single_word",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    caseSensitive: true,
                    delimitWord: false,
                }
            },
            {
                fieldName: "analyzer_split",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "split",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    delimiter: ",",
                }
            },
            {
                fieldName: "analyzer_fuzzy",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "fuzzy",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    minChars: 1,
                    maxChars: 5,
                }
            },
        ],
        indexSetting: { // The configuration options of the index.
            "routingFields": ["count", "pic_id"], // Only primary key columns can be set as routing fields.
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
            //sorters: [
                // { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // Unit: seconds.
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

Criar um índice de pesquisa e ativar o destaque

O exemplo abaixo cria um índice de pesquisa com destaque ativado. O índice possui três campos: k (Keyword), t (Text) e n (Nested). O campo n contém três subcampos: nk (Keyword), nl (Long) e nt (Text). O destaque está habilitado para o campo t e para o subcampo nt.

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // Set the table name.
    indexName: "<SEARCH_INDEX_NAME>", // Set the search index name.
    schema: {
        fieldSchemas: [
            {
                fieldName: "k",
                fieldType: TableStore.FieldType.KEYWORD, // Set the field name and field type.
                index: true, // Enable indexing.
                enableSortAndAgg: true, // Enable sorting and aggregation.
                isAnArray: false
            },
            {
                fieldName: "t",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                enableHighlighting: true, // Enable highlighting for the field.
                isAnArray: false,
            },
            {
                fieldName: "n",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "nk",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nl",
                        fieldType: TableStore.FieldType.LONG,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nt",
                        fieldType: TableStore.FieldType.TEXT,
                        index: true,
                        enableSortAndAgg: false,
                        enableHighlighting: true, // Enable highlighting for the field.
                    },
                ]
            },
        ],
        indexSetting: { // The configuration options of the index.
            "routingFields": ["id"], // Only primary key columns can be set as routing fields.
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort is not supported for indexes that contain Nested fields. No pre-sorting is performed.
            //sorters: [
                // { // If you do not set indexSort, the data is sorted by primary key in ascending order by default.
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // Set the sorting order for indexSort.
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // Unit: seconds.
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

Perguntas frequentes

Referências