Utilice Tablestore SDK for Python para crear un índice de búsqueda y configurar los campos del índice, el preordenamiento, el tiempo de vida (TTL), las columnas virtuales y el resaltado.
Requisitos previos
Instale Tablestore SDK for Python e inicialice un cliente.
Una table con el número máximo de versiones establecido en 1.
El TTL de la tabla establecido en -1 o las actualizaciones mediante
UpdateRowdeshabilitadas para la tabla.
Descripción
Llame a create_search_index para crear un índice de búsqueda para una tabla. Una tabla puede tener varios índices de búsqueda. Especifique la tabla, el nombre del índice y la configuración completa del índice en la solicitud. Además, agregue a fields las columnas que desea consultar. Los tipos de los campos del índice deben coincidir con los tipos de datos de las columnas correspondientes de la tabla. Para conocer los tipos compatibles, consulte Data types.
create_search_index(table_name, index_name, index_meta)
La creación del índice de búsqueda es asíncrona. Una vez que la solicitud se ejecuta correctamente, espere a que finalice la sincronización de los datos del índice antes de consultarlo.
A continuación se muestra un ejemplo que crea example_index en example_table con campos de tipo Keyword y Long. Si no se configura el preordenamiento ni el TTL, el índice se ordena por clave primaria y los datos del índice no caducan.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Parámetros
create_search_index admite los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
table_name (obligatorio) |
|
El nombre de la tabla. |
|
index_name (obligatorio) |
|
El nombre del índice de búsqueda. |
|
index_meta (obligatorio) |
|
La configuración del índice de búsqueda. |
Configuración del índice
index_meta es de tipo SearchIndexMeta y admite los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
fields (obligatorio) |
|
Los campos del índice. |
|
index_setting (opcional) |
|
Los ajustes del índice. |
|
index_sort (opcional) |
|
La configuración de preordenamiento. Si no se configura este parámetro y el índice no contiene un campo Nested, los datos se ordenan por clave primaria. Los índices Nested no admiten preordenamiento. |
|
time_to_live (opcional) |
|
El TTL de los datos del índice, en segundos. Valor predeterminado: -1. El valor debe ser -1 o un entero mayor o igual a 86400. Un valor de -1 indica que los datos del índice no caducan. Si especifica otro valor, deshabilite las actualizaciones mediante |
Campos del índice
Cada elemento de index_meta.fields[] es de tipo FieldSchema y admite los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
field_name (obligatorio) |
|
El nombre del campo del índice. El campo puede corresponder a una columna de clave primaria o a una columna de atributos. |
|
field_type (obligatorio) |
|
El tipo del campo del índice. Utilice Nested para relaciones lógicas de varias capas, JSON para datos con formato JSON y Geo-point para coordenadas geográficas. |
|
index (opcional) |
|
Indica si se crea un índice invertido o espacial para el campo. Valor predeterminado: |
|
enable_highlighting (opcional) |
|
Indica si se habilita summary and highlighting. Solo los campos Text admiten esta función. Valor predeterminado: |
|
analyzer (opcional) |
|
El analyzer para un campo Text. Si no se configura este parámetro, se utiliza la tokenización de palabra única. |
|
analyzer_parameter (opcional) |
|
Los parámetros del analizador. Si se configura |
|
enable_sort_and_agg (opcional) |
|
Indica si se habilitan la ordenación y la agregación. Valor predeterminado: |
|
is_array (opcional) |
|
Indica si el campo es un arreglo. Valor predeterminado: |
|
sub_field_schemas (opcional) |
|
Los campos secundarios de un campo Nested o JSON. Este parámetro es obligatorio para los campos Nested y JSON. |
|
is_virtual_field (opcional) |
|
Indica si el campo es una columna virtual. Valor predeterminado: |
|
source_fields (opcional) |
|
Los campos de la tabla de origen asignados a la columna virtual. Este parámetro es obligatorio para una columna virtual. Solo se admite un campo de origen. |
|
date_formats (opcional) |
|
Los formatos de fecha que admite un campo Date. Este parámetro es obligatorio para los campos Date. |
|
vector_options (opcional) |
|
El tipo de datos vectoriales, la dimensión y la métrica de distancia para un campo Vector. Este parámetro es obligatorio para los campos Vector. |
|
json_type (opcional) |
|
El tipo de índice JSON. Valores válidos: |
|
text_similarity (opcional) |
|
El algoritmo de similitud para un campo Text. Valores válidos: |
Configuración de vectores
index_meta.fields[].vector_options es de tipo VectorOptions y admite los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
data_type (obligatorio) |
|
El tipo de datos vectoriales. Solo se admite |
|
dimension (obligatorio) |
|
La dimensión del vector. Valor máximo: 4096. |
|
metric_type (obligatorio) |
|
La métrica de distancia. Valores válidos: |
Ajustes del índice
index_meta.index_setting es de tipo IndexSetting y admite el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
routing_fields (opcional) |
|
Los campos de enrutamiento personalizados. Puede especificar una o más columnas de clave primaria. En la mayoría de los casos, basta con especificar una sola columna. Si especifica varias columnas, sus valores se concatenan. Los registros con el mismo valor en el campo de enrutamiento se escriben en la misma partición de datos. |
Configuración de preordenamiento
index_meta.index_sort es de tipo Sort y admite el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
sorters (obligatorio) |
|
Las reglas de preordenamiento. |
Ordenación por clave primaria
Un elemento de tipo PrimaryKeySort dentro de index_meta.index_sort.sorters[] ordena los datos por clave primaria y admite el siguiente parámetro.
|
Nombre |
Tipo |
Descripción |
|
sort_order (opcional) |
|
El orden de clasificación. Valores válidos: |
Ordenación por valor de campo
Un elemento de tipo FieldSort dentro de index_meta.index_sort.sorters[] ordena los datos por el valor del campo y admite los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
field_name (obligatorio) |
|
El nombre del campo. |
|
sort_order (opcional) |
|
El orden de clasificación. Valores válidos: |
|
sort_mode (opcional) |
|
El valor que se utiliza para ordenar cuando un campo contiene varios valores. |
Ejemplos
Configurar el preordenamiento
En el siguiente ejemplo, los datos del índice se preordenan por el campo created_at en orden ascendente.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"created_at",
FieldType.LONG,
index=True,
enable_sort_and_agg=True,
),
]
index_sort = Sort([FieldSort("created_at", SortOrder.ASC)])
index_meta = SearchIndexMeta(fields, index_sort=index_sort)
client.create_search_index(table_name, index_name, index_meta)
Configurar el TTL del índice
En el siguiente ejemplo, el TTL del índice se establece en 7 días.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
]
index_meta = SearchIndexMeta(fields, time_to_live=7 * 24 * 60 * 60)
client.create_search_index(table_name, index_name, index_meta)
Configurar la tokenización
En el siguiente ejemplo se configura la tokenización por división para el campo Text description y se utiliza una coma (,) como delimitador.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
analyzer=AnalyzerType.SPLIT,
analyzer_parameter=SplitAnalyzerParameter(","),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Crear un campo vectorial
En el siguiente ejemplo se crea un campo Vector de cuatro dimensiones llamado embedding y se utiliza el producto punto para medir la similitud entre vectores.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"embedding",
FieldType.VECTOR,
index=True,
vector_options=VectorOptions(
data_type=VectorDataType.VD_FLOAT_32,
dimension=4,
metric_type=VectorMetricType.VM_DOT_PRODUCT,
),
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Crear columnas virtuales
En el siguiente ejemplo, el campo Keyword category se asigna a una columna virtual Long y el campo Long price se asigna a una columna virtual Keyword.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema(
"category_as_long",
FieldType.LONG,
index=True,
is_virtual_field=True,
source_fields=["category"],
),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"price_as_keyword",
FieldType.KEYWORD,
index=True,
is_virtual_field=True,
source_fields=["price"],
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)
Habilitar el resaltado
En el siguiente ejemplo se habilita el resaltado para el campo Text description.
table_name = "example_table"
index_name = "example_index"
fields = [
FieldSchema("category", FieldType.KEYWORD, index=True),
FieldSchema("price", FieldType.LONG, index=True),
FieldSchema(
"description",
FieldType.TEXT,
index=True,
enable_highlighting=True,
),
]
index_meta = SearchIndexMeta(fields)
client.create_search_index(table_name, index_name, index_meta)