Utilisez le SDK Tablestore pour Python pour créer un index de recherche et configurer les champs d'index, le prétri, la durée de vie (TTL), les colonnes virtuelles et la mise en surbrillance.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Une table dont le nombre maximal de versions est défini sur 1.
La durée de vie (TTL) de la table est définie sur -1 ou les mises à jour via
UpdateRowsont désactivées pour cette table.
Description
Appelez create_search_index pour créer un index de recherche associé à une table. Une table peut comporter plusieurs index de recherche. Spécifiez le nom de la table, le nom de l'index et sa configuration complète dans la requête, puis ajoutez les colonnes à interroger dans fields. Les types des champs de l'index doivent correspondre aux types de données des colonnes de la table associée. Pour consulter les types pris en charge, reportez-vous à la rubrique Types de données.
create_search_index(table_name, index_name, index_meta)
La création d'un index de recherche est asynchrone. Après la réussite de la requête, attendez la fin de la synchronisation des données de l'index avant de l'interroger.
L'exemple suivant crée l'index example_index sur la table example_table avec des champs de type Keyword et Long. Sans configuration explicite du prétri et de la TTL, l'index est trié par clé primaire et ses données n'expirent pas.
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)
Paramètres
La méthode create_search_index accepte les paramètres suivants.
|
Nom |
Type |
Description |
|
table_name (obligatoire) |
|
Nom de la table. |
|
index_name (obligatoire) |
|
Nom de l'index de recherche. |
|
index_meta (obligatoire) |
|
Configuration de l'index de recherche. |
Configuration de l'index
Le paramètre index_meta est de type SearchIndexMeta et comprend les éléments suivants.
|
Nom |
Type |
Description |
|
fields (obligatoire) |
|
Champs de l'index. |
|
index_setting (facultatif) |
|
Paramètres de l'index. |
|
index_sort (facultatif) |
|
Configuration du prétri. Si ce paramètre n'est pas défini et que l'index ne contient aucun champ Nested, les données sont triées par clé primaire. Le prétri n'est pas pris en charge pour les index Nested. |
|
time_to_live (facultatif) |
|
Durée de vie (TTL) des données de l'index, en secondes. Valeur par défaut : -1. La valeur doit être égale à -1 ou à un entier supérieur ou égal à 86400. Une valeur de -1 indique que les données de l'index n'expirent jamais. Si vous choisissez une autre valeur, désactivez les mises à jour via |
Champs de l'index
Chaque élément du tableau index_meta.fields[] est de type FieldSchema et admet les paramètres ci-après.
|
Nom |
Type |
Description |
|
field_name (obligatoire) |
|
Nom du champ de l'index. Ce champ peut correspondre à une colonne de clé primaire ou à une colonne d'attribut. |
|
field_type (obligatoire) |
|
Type du champ de l'index. Utilisez Nested pour les relations logiques multiniveaux, JSON pour les données au format JSON et Geo-point pour les coordonnées géographiques. |
|
index (facultatif) |
|
Indique s'il faut créer un index inversé ou spatial pour le champ. Valeur par défaut : |
|
enable_highlighting (facultatif) |
|
Active ou non la fonctionnalité de résumé et mise en surbrillance. Seuls les champs de type Text sont compatibles. Valeur par défaut : |
|
analyzer (facultatif) |
|
Analyseur appliqué à un champ Text. Par défaut, une segmentation par mot unique est utilisée si ce paramètre n'est pas renseigné. |
|
analyzer_parameter (facultatif) |
|
Paramètres de l'analyseur. Lorsque le paramètre |
|
enable_sort_and_agg (facultatif) |
|
Active ou non le tri et l'agrégation. Valeur par défaut : |
|
is_array (facultatif) |
|
Précise si le champ est un tableau. Valeur par défaut : |
|
sub_field_schemas (facultatif) |
|
Sous-champs d'un champ Nested ou JSON. Ce paramètre est obligatoire pour ces deux types de champs. |
|
is_virtual_field (facultatif) |
|
Indique si le champ est une colonne virtuelle. Valeur par défaut : |
|
source_fields (facultatif) |
|
Champs de la table source mappés à la colonne virtuelle. Obligatoire pour toute colonne virtuelle. Un seul champ source est autorisé. |
|
date_formats (facultatif) |
|
Formats de date acceptés par un champ Date. Paramètre requis pour les champs de type Date. |
|
vector_options (facultatif) |
|
Type de données vectorielles, dimension et métrique de distance pour un champ Vector. Paramètre obligatoire pour les champs Vector. |
|
json_type (facultatif) |
|
Type d'index JSON. Valeurs valides : |
|
text_similarity (facultatif) |
|
Algorithme de similarité pour un champ Text. Valeurs valides : |
Configuration vectorielle
L'objet index_meta.fields[].vector_options est de type VectorOptions et expose les paramètres suivants.
|
Nom |
Type |
Description |
|
data_type (obligatoire) |
|
Type de données vectorielles. Seul |
|
dimension (obligatoire) |
|
Dimension du vecteur. Valeur maximale : 4096. |
|
metric_type (obligatoire) |
|
Métrique de distance. Valeurs valides : |
Paramètres de l'index
L'objet index_meta.index_setting est de type IndexSetting et comporte le paramètre suivant.
|
Nom |
Type |
Description |
|
routing_fields (facultatif) |
|
Champs de routage personnalisés. Vous pouvez désigner une ou plusieurs colonnes de clé primaire, bien qu'une seule suffise généralement. Lorsque plusieurs colonnes sont spécifiées, leurs valeurs sont concaténées. Les enregistrements partageant la même valeur de champ de routage sont stockés dans la même partition de données. |
Configuration du prétri
L'objet index_meta.index_sort est de type Sort et inclut le paramètre ci-dessous.
|
Nom |
Type |
Description |
|
sorters (obligatoire) |
|
Règles de prétri. |
Tri par clé primaire
Un élément de type PrimaryKeySort dans le tableau index_meta.index_sort.sorters[] permet de trier les données par clé primaire et accepte le paramètre suivant.
|
Nom |
Type |
Description |
|
sort_order (facultatif) |
|
Ordre de tri. Valeurs valides : |
Tri par valeur de champ
Un élément de type FieldSort dans le tableau index_meta.index_sort.sorters[] trie les données selon la valeur d'un champ et prend en charge les paramètres suivants.
|
Nom |
Type |
Description |
|
field_name (obligatoire) |
|
Nom du champ. |
|
sort_order (facultatif) |
|
Ordre de tri. Valeurs valides : |
|
sort_mode (facultatif) |
|
Valeur retenue pour le tri lorsqu'un champ contient plusieurs valeurs. |
Exemples
Configurer le prétri
L'exemple ci-dessous configure un prétri des données de l'index par ordre croissant selon le champ created_at.
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)
Configurer la TTL de l'index
Cet exemple définit une durée de vie (TTL) de 7 jours pour l'index.
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)
Configurer la segmentation
L'exemple suivant applique une segmentation par séparateur au champ Text description, en utilisant la virgule (,) comme délimiteur.
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)
Créer un champ vectoriel
Le code ci-après crée un champ Vector nommé embedding à quatre dimensions, en utilisant le produit scalaire pour mesurer la similarité entre vecteurs.
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)
Créer des colonnes virtuelles
Dans cet exemple, le champ Keyword category est mappé à une colonne virtuelle de type Long, tandis que le champ Long price est mappé à une colonne virtuelle de type 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)
Activer la mise en surbrillance
L'exemple suivant active la mise en surbrillance pour le champ 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)