Todos los productos
Search
Centro de documentos

Tablestore:Create a search index

Última actualización: Sep 03, 2026

Cree un índice de búsqueda para una tabla y configure los campos del índice, la preordenación, el tiempo de vida (TTL), las columnas virtuales y el resaltado con Tablestore SDK for Java.

Requisitos previos

Antes de empezar, asegúrese de que:

  • Ha instalado el Tablestore SDK for Java e inicializado el cliente.

  • La tabla existe y su número máximo de versiones de datos es 1.

  • El TTL de la tabla es -1 o las actualizaciones con UpdateRow están deshabilitadas.

Descripción

Llame a createSearchIndex para crear un índice de búsqueda para una tabla. Puede crear varios índices de búsqueda para la misma tabla. En la solicitud, especifique el nombre de la tabla, el nombre del índice y el esquema completo del índice, y agregue las columnas que desea consultar a fieldSchemas. El data type de cada campo del índice debe coincidir con el tipo de columna correspondiente en la tabla.

public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
Nota

La creación del índice de búsqueda es asíncrona. Una vez que la solicitud se completa correctamente, consulte la información del índice y espere hasta que el estado del índice cambie a RUNNING antes de consultar datos.

El siguiente ejemplo crea example_index para example_table con campos Keyword y Long. Sin configuración de preordenación ni TTL, el índice se ordena por clave primaria y sus datos no caducan.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);

client.createSearchIndex(request);

Parámetros

CreateSearchIndexRequest contiene los siguientes parámetros:

Nombre

Tipo

Descripción

tableName (obligatorio)

String

El nombre de la tabla.

indexName (obligatorio)

String

El nombre del índice de búsqueda.

indexSchema (obligatorio)

IndexSchema

El esquema del índice.

sourceIndexName (opcional)

String

El nombre del índice de origen para la reconstrucción del índice. Establezca este parámetro solo cuando modifique dinámicamente un esquema de índice de búsqueda.

timeToLive (opcional)

Integer

El TTL de los datos del índice en segundos. Valor predeterminado: -1. Establezca este parámetro en -1 o en un número entero de como mínimo 86,400. Un valor de -1 significa que los datos no caducan. Tablestore elimina automáticamente los datos después de que su período de retención supera este valor.

Para establecer un valor distinto de -1, deshabilite las actualizaciones de UpdateRow para la tabla. El TTL del índice no puede superar el TTL de la tabla. Después de crear el índice, puede llamar a updateSearchIndex para cambiar el valor. Para especificar el TTL en días, llame a setTimeToLiveInDays. Para obtener más información, consulte Configure the TTL of a search index.

Esquema del índice

indexSchema es del tipo IndexSchema y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

fieldSchemas (obligatorio)

List<FieldSchema>

Los campos del índice.

indexSetting (opcional)

IndexSetting

La configuración del índice.

indexSort (opcional)

Sort

La configuración de preordenación del índice. Si no se establece este parámetro y el índice no contiene un campo Nested, Tablestore ordena por clave primaria. Los índices anidados no admiten preordenación.

Campos del índice

Cada elemento en indexSchema.fieldSchemas[] es del tipo FieldSchema y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

fieldName (obligatorio)

String

El nombre del campo del índice. El campo puede asignarse a una columna de clave primaria o a una columna de atributo.

fieldType (obligatorio)

FieldType

El tipo de campo del índice. Utilice Nested para relaciones multinivel, JSON para datos con formato JSON y Geo-point para datos geográficos. También puede almacenar datos con formato JSON como cadenas y consultarlos con campos de matriz o Nested.

index (opcional)

boolean

Especifica si se debe crear un índice invertido o espacial para el campo. Valor predeterminado: true. Si se establece en false, no se crea ningún índice para el campo.

enableHighlighting (opcional)

boolean

Especifica si se debe habilitar summary and highlighting. Solo los campos Text admiten esta función. Valor predeterminado: false.

analyzer (opcional)

String

El analyzer para un campo Text. Si no se establece este parámetro, se utiliza la tokenización de un solo carácter.

analyzerParameter (opcional)

AnalyzerParameter

La configuración del analizador. Si establece analyzer, debe configurar los parámetros requeridos por ese analizador.

enableSortAndAgg (opcional)

boolean

Especifica si se deben habilitar la ordenación y la agregación. Valor predeterminado: true. Los campos Text no admiten ordenación ni agregación. Para ordenar o agregar contenido Text, cree una virtual column Keyword.

isArray (opcional)

boolean

Especifica si el campo es una matriz. Escriba los valores de la matriz como matrices JSON. No necesita establecer este parámetro para los campos Nested.

subFieldSchemas (opcional)

List<FieldSchema>

Los subcampos de un campo Nested. Este parámetro es obligatorio para un campo Nested.

isVirtualField (opcional)

boolean

Especifica si el campo es una virtual column. Valor predeterminado: false.

sourceFieldNames (opcional)

List<String>

Los campos de la tabla asignados a la columna virtual. Este parámetro es obligatorio para una columna virtual.

dateFormats (opcional)

List<String>

Los formatos de fecha admitidos por un campo Date. Este parámetro es obligatorio para un campo Date.

vectorOptions (opcional)

VectorOptions

El tipo de datos vectoriales, la dimensión y la métrica de distancia. Este parámetro es obligatorio para un campo Vector.

jsonType (opcional)

JsonType

El tipo de índice de un campo JSON. Valores válidos: OBJECT y NESTED. Este parámetro es obligatorio para un campo JSON.

Opciones de vector

indexSchema.fieldSchemas[].vectorOptions es del tipo VectorOptions y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

dataType (obligatorio)

VectorDataType

El tipo de datos vectoriales. Solo se admite FLOAT_32.

dimension (obligatorio)

Integer

La dimensión del vector. Valor máximo: 4,096.

metricType (obligatorio)

VectorMetricType

La métrica de distancia. Valores válidos: EUCLIDEAN, COSINE y DOT_PRODUCT. Una puntuación más alta indica mayor similitud.

EUCLIDEAN mide la distancia en línea recta y omite el cálculo final de la raíz cuadrada en Tablestore. COSINE mide el coseno del ángulo entre vectores y se usa comúnmente para la similitud de texto. DOT_PRODUCT multiplica las coordenadas correspondientes de vectores de igual dimensión y suma los resultados. Para obtener más información, consulte Distance metric algorithms.

Configuración del índice

indexSchema.indexSetting es del tipo IndexSetting y contiene el siguiente parámetro.

Nombre

Tipo

Descripción

routingFields (opcional)

List<String>

Los campos de enrutamiento personalizados. Seleccione una o más columnas de clave primaria. En la mayoría de los casos, un campo es suficiente. Si especifica varios campos, Tablestore concatena sus valores. Tablestore utiliza los valores del campo de enrutamiento para distribuir los datos del índice y escribe registros con los mismos valores en la misma partición de datos.

Preordenación del índice

indexSchema.indexSort es del tipo Sort y contiene el siguiente parámetro.

Nombre

Tipo

Descripción

sorters (opcional)

List<Sort.Sorter>

Los preordenadores. PrimaryKeySort ordena por clave primaria y FieldSort ordena por valor de campo. Los campos utilizados en FieldSort deben estar indexados con la ordenación y la agregación habilitadas. Para obtener más información, consulte Sort and paginate results.

Ordenación por clave primaria

Un elemento de la ruta indexSchema.indexSort.sorters[] cuyo tipo es PrimaryKeySort realiza la preordenación por clave primaria y contiene el siguiente parámetro.

Nombre

Tipo

Descripción

order (opcional)

SortOrder

El orden de clasificación de la clave primaria. Valores válidos: SortOrder.ASC y SortOrder.DESC. Valor predeterminado: SortOrder.ASC.

Ordenación por campo

Un elemento de la ruta indexSchema.indexSort.sorters[] cuyo tipo es FieldSort realiza la preordenación por valor de campo y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

fieldName (obligatorio)

String

El campo utilizado para la preordenación.

order (opcional)

SortOrder

El orden de clasificación del campo. Valores válidos: SortOrder.ASC y SortOrder.DESC. Valor predeterminado: SortOrder.ASC.

mode (opcional)

SortMode

El método de ordenación para un campo con múltiples valores.

Ejemplos

Configurar la preordenación del índice

El siguiente ejemplo preordena los datos del índice por el campo created_at en orden ascendente.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("description", FieldType.TEXT),
        new FieldSchema("created_at", FieldType.LONG)
                .setEnableSortAndAgg(true)));
indexSchema.setIndexSort(new Sort(
        Collections.<Sort.Sorter>singletonList(
                new FieldSort("created_at", SortOrder.ASC))));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

Configurar un TTL de índice

El siguiente ejemplo configura un TTL de siete días. Utilice Tablestore SDK for Java 5.12.0 o posterior.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
request.setTimeToLiveInDays(7);
client.createSearchIndex(request);

Crear columnas virtuales

El siguiente ejemplo asigna el campo Keyword category a una columna virtual Long y el campo Long price a una columna virtual Keyword.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("category_as_long", FieldType.LONG)
                .setVirtualField(true)
                .setSourceFieldName("category"),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("price_as_keyword", FieldType.KEYWORD)
                .setVirtualField(true)
                .setSourceFieldName("price")));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

Habilitar resumen y resaltado

El siguiente ejemplo habilita el resumen y el resaltado para el campo Text description.

String tableName = "example_table";
String indexName = "example_index";

IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("category", FieldType.KEYWORD),
        new FieldSchema("price", FieldType.LONG),
        new FieldSchema("description", FieldType.TEXT)
                .setEnableHighlighting(true)));

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);