Todos los productos
Search
Centro de documentos

Tablestore:Create a search index

Última actualización: Sep 18, 2026

Cree uno o varios índices de búsqueda para una tabla de datos mediante el método CreateSearchIndex. Al crear un índice de búsqueda, especifique los campos que desea consultar y, de forma opcional, configure opciones avanzadas como claves de enrutamiento personalizadas y ordenación previa.

Requisitos previos

Antes de empezar, compruebe lo siguiente:

  • El cliente de Tablestore está inicializado. Para más información, consulte Initialize the Tablestore Client.

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

    • El número máximo de versiones se estableció en 1.

    • El tiempo de vida (TTL) se estableció en -1 o la tabla de datos tiene deshabilitadas las actualizaciones.

Compatibilidad de tipos de campo

El data type de cada campo del índice de búsqueda debe coincidir con el tipo de dato del campo correspondiente en la tabla de datos.

Parámetros

Para crear un índice de búsqueda, especifique el nombre de la tabla (TableName), el nombre del índice de búsqueda (IndexName) y el esquema del índice (IndexSchema). El IndexSchema contiene FieldSchemas (configuración de campos), IndexSetting (configuración del índice) e IndexSort (configuración de ordenación previa).

Parámetro

Descripción

TableName

El nombre de la tabla de datos.

IndexName

El nombre del índice de búsqueda.

FieldSchemas

Una lista de objetos FieldSchema. Cada objeto FieldSchema contiene los siguientes parámetros:

  • FieldName (obligatorio): el nombre del campo en el índice de búsqueda, que corresponde a un nombre de columna. Tipo: String. El campo puede ser una columna de clave primaria o una columna de atributo.

  • FieldType (obligatorio): el data type del campo. Tipo: FieldType.XXX.

  • Array (opcional): indica si el campo almacena datos de tipo arreglo. Tipo: Boolean. Si se establece en true, escriba los datos en formato de arreglo JSON, por ejemplo, ["a","b","c"]. El tipo Nested es inherentemente un arreglo; no establezca este parámetro cuando FieldType sea Nested.

  • Index (opcional): indica si se habilita la indexación para el campo. Tipo: Boolean. Valor predeterminado: true. Cuando se habilita, se crea un índice invertido o un índice espacial para la columna. Establézcalo en false para omitir la indexación.

  • Analyzer (opcional): el tipo de tokenizer. Se aplica únicamente cuando FieldType es Text. Valor predeterminado: tokenización de palabra única.

  • EnableSortAndAgg (opcional): indica si se habilitan la ordenación y la agregación para el campo. Tipo: Boolean. Solo los campos con este valor establecido en true admiten sorting. El tipo Nested no admite ordenación ni agregación; sin embargo, las subcolumnas dentro de un campo Nested sí lo hacen.

  • IsVirtualField (opcional): indica si el campo es un virtual column. Tipo: Boolean. Valor predeterminado: false. Establezca este parámetro solo para columnas virtuales.

  • SourceFieldNames (opcional): los nombres de las columnas de origen en la tabla de datos. Tipo: String. Obligatorio cuando IsVirtualField es true.

  • DateFormats (opcional): los formatos de fecha. Tipo: String. Obligatorio cuando FieldType es Date. Para más información, consulte Date and time types.

IndexSetting

Configuración del índice. Contiene el siguiente parámetro:

RoutingFields (opcional): campos de enrutamiento personalizados. Seleccione una o varias columnas de clave primaria como campos de enrutamiento. En la mayoría de los casos, un solo campo de enrutamiento es suficiente. Si establece varias claves de enrutamiento, el sistema concatena sus valores en uno solo. Los registros con los mismos valores de campo de enrutamiento se indexan en la misma partición de datos.

IndexSort

Configuración de ordenación previa del índice. Si no se especifica, los datos se ordenan por clave primaria de forma predeterminada. Los índices que contienen campos Nested no admiten IndexSort.

Sorters (obligatorio): el método de ordenación previa. Admite la ordenación por clave primaria o por valor de campo. Para más información, consulte Sorting and pagination.

  • PrimaryKeySort: ordena por clave primaria. Establezca el parámetro Order para indicar el orden ascendente o descendente. Valor predeterminado: ascendente (DataModel.Search.Sort.SortOrder.ASC).

  • FieldSort: ordena por valor de campo. Solo los campos indexados con ordenación y agregación habilitadas pueden usarse para la ordenación previa. Contiene la siguiente configuración:

    • FieldName: el nombre del campo por el cual se va a ordenar.

    • Order: el orden de clasificación. Valor predeterminado: ascendente (DataModel.Search.Sort.SortOrder.ASC).

    • Mode: el modo de ordenación cuando un campo contiene varios valores.

TimeToLive

Opcional. El tiempo de vida (TTL) de los datos en el índice de búsqueda, en segundos. Valor predeterminado: -1 (los datos nunca caducan). Valor mínimo: 86400 segundos (un día). Los datos caducados se limpian automáticamente cuando el periodo de retención supera el TTL configurado.

Ejemplos

Crear un índice de búsqueda con la configuración predeterminada

Cree un índice de búsqueda con tres campos: Keyword_type_col (Keyword), Long_type_col (Long) y Text_type_col (Text). Habilite la ordenación y la agregación en los campos Keyword y Long.

/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    // Set the table name and search index name.
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
            index = true,            // Enable indexing.
            EnableSortAndAgg = true  // Enable sorting and aggregation.
        },
        new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
        new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas
    };
    // Create the search index.
    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

Crear un índice de búsqueda y especificar IndexSort

Cree un índice de búsqueda con tres campos: Keyword_type_col (Keyword), Long_type_col (Long) y Text_type_col (Text). Ordene previamente los resultados por el campo Long_type_col en orden ascendente.

/// <summary>
/// Creates a search index with three attribute columns: Keyword_type_col, Long_type_col, and Text_type_col.
/// Field types: Keyword (non-tokenized string), Long (integer), and Text (tokenized string).
/// Pre-sorts results by Long_type_col in ascending order.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
    // Set the table name and search index name.
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col, FieldType.KEYWORD) {
            index = true,
            EnableSortAndAgg = true
        },
        new FieldSchema(Long_type_col, FieldType.LONG) { index = true, EnableSortAndAgg = true },
        new FieldSchema(Text_type_col, FieldType.TEXT) { index = true }
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas,
        // Pre-sort by Long_type_col (ascending). The field must have EnableSortAndAgg enabled.
        IndexSort = new DataModel.Search.Sort.Sort()
        {
            Sorters = new List<DataModel.Search.Sort.ISorter>
            {
                new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
            }
        }
    };

    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("Searchindex is created: " + IndexName);
}

Crear un índice de búsqueda que contiene una columna de fecha y una columna virtual

Cree un índice de búsqueda con cinco campos: pk0 (Keyword), pk1 (Long), date_col (Date), geo_col (Geo-point) y col0_v1 (Text). La columna virtual col0_v1 se asigna a la columna de origen col0. Los resultados se ordenan previamente por pk1 en orden ascendente.

/// <summary>
/// Creates a search index that includes a Date field and a virtual column.
/// The virtual column col0_v1 maps to the source column col0 in the data table.
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    List<FieldSchema> fieldSchemas = new List<FieldSchema> {
        new FieldSchema("pk0", FieldType.KEYWORD)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("pk1", FieldType.LONG)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("date_col", FieldType.DATE)
        {
            index = true,
            DateFormats = new List<string>(){
                "yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
                "yyyy-MM-dd'T'HH:mm:ss.SSS"
            }
        },

        new FieldSchema("geo_col", FieldType.GEO_POINT)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("col0_v1", FieldType.TEXT)
        {
            index = true,
            Analyzer = Analyzer.Split,
            AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
            IsVirtualField = true,
            SourceFieldNames = new List<string> { "col0" }  // Maps to source column col0.
        },
    };

    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = fieldSchemas,
        IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
    };
    request.TimeToLive = -1;  // Data never expires.

    otsClient.CreateSearchIndex(request);
}

Preguntas frecuentes

Pasos siguientes