Todos los productos
Search
Centro de documentos

Tablestore:Create a search index

Última actualización: Sep 03, 2026

Puede utilizar el método CreateSearchIndex para crear uno o varios índices de búsqueda en una tabla de datos. Al crear un índice de búsqueda, debe agregar al índice los campos que desea consultar. También puede configurar opciones avanzadas, como campos de enrutamiento y preordenación.

Requisitos previos

  • Se ha inicializado un cliente de Tablestore. Para obtener más información, consulte Initialize a Tablestore client.

  • Se ha creado una tabla de datos que cumple con las siguientes condiciones. Para obtener más información, consulte Create a data table.

    • El número máximo de versiones está establecido en 1.

    • El tiempo de vida (TTL) está establecido en -1 o la operación UpdateRow está deshabilitada para la tabla de datos.

Notas de uso

  • Los data types de los campos en el índice de búsqueda deben coincidir con los tipos de datos de los campos en la tabla de datos.

  • Para establecer el TTL de un índice de búsqueda en un valor distinto de -1, deshabilite la operación UpdateRow para la tabla de datos. El TTL del índice de búsqueda debe ser menor o igual que el TTL de la tabla de datos. Para obtener más información, consulte Lifecycle management.

Parámetros

Para crear un índice de búsqueda, especifique el nombre de la tabla (tableName), el nombre del índice (indexName) y el esquema del índice (schema). El esquema incluye esquemas de campos (fieldSchemas), configuración del índice (indexSetting) y ajustes de preordenación del índice (indexSort).

Parámetro

Descripción

tableName

El nombre de la tabla de datos.

indexName

El nombre del índice de búsqueda.

fieldSchemas

La lista de esquemas de campos. Cada esquema de campo contiene los siguientes parámetros:

  • fieldName (obligatorio): El nombre del campo que se va a indexar. Corresponde al nombre de la columna. Tipo: String.

    Un campo en un índice de búsqueda puede ser una columna de clave primaria o una columna de atributo.

  • fieldType (obligatorio): El data type del campo. Establezca este parámetro en TableStore.FieldType.XXX.

  • index (opcional): Indica si se habilita la indexación. Tipo: Boolean.

    Valor predeterminado: true, lo que crea un índice invertido o espacial para la columna. Establézcalo en false para omitir la indexación de la columna.

  • analyzer (opcional): El tipo de tokenizer. Configure este parámetro cuando el tipo de campo sea Text. Si no se establece, se utiliza la tokenización de palabra única de forma predeterminada.

  • analyzerParameter (opcional): La configuración de parámetros del tokenizer. Configure los parámetros según el tipo de tokenizer. Es obligatorio si se establece el parámetro analyzer para un campo.

  • enableSortAndAgg (opcional): Indica si se habilitan la ordenación y la agregación estadística. Tipo: Boolean.

    Solo los campos con enableSortAndAgg establecido en true admiten sorting.

    Importante

    Los campos anidados no admiten ordenación ni agregación estadística. Sin embargo, las subcolumnas dentro de un campo anidado sí admiten ordenación y agregación estadística.

  • isAnArray (opcional): Indica si el campo es una matriz. Tipo: Boolean.

    Si se establece en true, la columna es una matriz. Escriba los datos en formato de matriz JSON, como ["a","b","c"].

    Los tipos anidados son inherentemente matrices, por lo que este parámetro no es necesario cuando fieldType es Nested.

  • fieldSchemas (opcional): Cuando el tipo de campo es Nested, utilice este parámetro para establecer los tipos de índice de las subcolumnas en el documento anidado. El tipo es una lista de esquemas de campos.

  • isVirtualField (opcional): Indica si el campo es una virtual column. Tipo: Boolean. Valor predeterminado: false. Establézcalo en true para usar una columna virtual.

  • sourceFieldName (opcional): El nombre del campo de origen en la tabla de datos. Tipo: String. Obligatorio si isVirtualField se establece en true.

  • dateFormats (opcional): El formato de fecha. Tipo: String. Obligatorio si el tipo de campo es Date. Para obtener más información, consulte Date and time data types.

  • enableHighlighting (opcional): Indica si se habilita el summary and highlighting. Tipo: Boolean. Valor predeterminado: false. Establézcalo en true para habilitar esta función. Solo los campos de tipo Text admiten resaltado.

    Importante

    Esta función es compatible con el SDK de Tablestore para Node.js versión 5.5.0 y posteriores.

  • vectorOptions (opcional): Las propiedades del campo vectorial. Obligatorio para campos de tipo Vector. Incluye los siguientes parámetros:

    • dataType: El tipo de datos del vector. Solo se admite float32. Para requisitos de otros tipos de datos, envíe un ticket.

    • dimension: El número de dimensiones del vector. Máximo: 4,096.

    • metricType: El algoritmo de medición de distancia para vectores. Algoritmos compatibles: distancia euclidiana (euclidean), similitud coseno (cosine) y producto punto (dot_product).

      • Distancia euclidiana (euclidean): Mide la distancia en línea recta entre dos vectores en un espacio multidimensional. Por razones de rendimiento, Tablestore omite el cálculo final de la raíz cuadrada. Una puntuación mayor indica una mayor similitud.

      • Similitud coseno (cosine): Mide el coseno del ángulo entre dos vectores. Una puntuación más alta indica una mayor similitud. Se usa comúnmente para datos de texto.

      • Producto punto (dot_product): Multiplica las coordenadas correspondientes de dos vectores de la misma dimensión y suma los resultados. Una puntuación más alta indica una mayor similitud.

      Para obtener orientación sobre cómo seleccionar un algoritmo de métrica de distancia, consulte Distance metric algorithms.

indexSetting

La configuración del índice, que incluye el ajuste routingFields.

routingFields (opcional): Los campos de enrutamiento personalizados. Puede seleccionar algunas columnas de clave primaria como campos de enrutamiento. En la mayoría de los casos, solo necesita establecer uno. Si establece varias claves de enrutamiento, el sistema concatena los valores de las claves de enrutamiento en un solo valor.

Durante la escritura de datos del índice, el sistema distribuye los datos del índice según los valores de los campos de enrutamiento. Los registros con los mismos valores de campo de enrutamiento se almacenan en la misma partición de datos.

indexSort

La configuración de preordenación del índice, que incluye el ajuste sorters. Si no se establece, los datos se ordenan por clave primaria de forma predeterminada.

Nota

Los índices que contienen campos anidados no admiten indexSort. No se realiza ninguna preordenación.

sorters (obligatorio): El método de preordenación para el índice. Admite la ordenación por clave primaria o por valor de campo. Para obtener más información, consulte Sorting and paging.

  • PrimaryKeySort ordena por clave primaria. Incluye la siguiente configuración:

    order: El orden de clasificación. Admite orden ascendente o descendente. Valor predeterminado: ascendente (TableStore.SortOrder.SORT_ORDER_ASC).

  • FieldSort ordena por valor de campo. Incluye las siguientes configuraciones:

    La preordenación solo se aplica a campos que tienen un índice y que tienen habilitadas la ordenación y la agregación estadística.

    • fieldName: El nombre del campo por el cual ordenar.

    • order: El orden de clasificación. Admite orden ascendente o descendente. Valor predeterminado: ascendente (TableStore.SortOrder.SORT_ORDER_ASC).

    • mode: El método de ordenación que se debe usar cuando un campo tiene varios valores.

timeToLive

Opcional. El tiempo de vida (TTL) de los datos, que corresponde al período de retención de datos. Unidad: segundos.

Valor predeterminado: -1, lo que significa que los datos nunca caducan. El valor mínimo de TTL es 86400 segundos (un día).

Cuando el período de retención de datos supera el TTL, los datos caducados se limpian automáticamente.

Ejemplos

Crear un índice de búsqueda y establecer un tokenizer

El siguiente ejemplo crea un índice de búsqueda con estas columnas: 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) y analyzer_fuzzy (Text). La columna pic_tag tiene dos subcampos: sub_tag_name (Keyword) y tag_name (Keyword). La columna analyzer_single_word utiliza tokenización de palabra única, analyzer_split utiliza tokenización por delimitador y analyzer_fuzzy utiliza tokenización 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);
});

Crear un índice de búsqueda y habilitar el resaltado

El siguiente ejemplo crea un índice de búsqueda con el resaltado habilitado. El índice tiene tres campos: k (Keyword), t (Text) y n (Nested). El campo n tiene tres subcampos: nk (Keyword), nl (Long) y nt (Text). El resaltado está habilitado para el campo t y el 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);
});

Preguntas frecuentes

Referencias