Créez un index de recherche pour une table et configurez les champs d'index, le prétri, la durée de vie (TTL), les colonnes virtuelles et la mise en surbrillance à l'aide du SDK Tablestore pour Java.
Prérequis
Avant de commencer, assurez-vous que :
Vous avez installé le SDK Tablestore pour Java et initialisé le client.
La table existe et son nombre maximal de versions de données est égal à 1.
La TTL de la table est définie sur -1 ou les mises à jour avec
UpdateRowsont désactivées.
Description
Appelez createSearchIndex pour créer un index de recherche pour une table. Vous pouvez créer plusieurs index de recherche pour la même table. Dans la requête, spécifiez le nom de la table, le nom de l'index et le schéma d'index complet, puis ajoutez les colonnes que vous souhaitez interroger dans fieldSchemas. Le type de données de chaque champ d'index doit correspondre au type de colonne correspondant dans la table.
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
La création d'un index de recherche est asynchrone. Une fois la requête réussie, interrogez les informations de l'index et attendez que son statut passe à RUNNING avant d'interroger les données.
L'exemple suivant crée example_index pour example_table avec des champs Keyword et Long. Sans configuration de prétri ni de TTL, l'index est trié par clé primaire et ses données n'expirent pas.
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);
Paramètres
CreateSearchIndexRequest contient les paramètres suivants :
|
Nom |
Type |
Description |
|
tableName (obligatoire) |
|
Le nom de la table. |
|
indexName (obligatoire) |
|
Le nom de l'index de recherche. |
|
indexSchema (obligatoire) |
|
Le schéma de l'index. |
|
sourceIndexName (facultatif) |
|
Le nom de l'index source pour la reconstruction de l'index. Définissez ce paramètre uniquement lorsque vous modifiez dynamiquement le schéma d'un index de recherche. |
|
timeToLive (facultatif) |
|
La durée de vie (TTL) des données de l'index, en secondes. Valeur par défaut : -1. Définissez ce paramètre sur -1 ou sur un entier d'au moins 86 400. Une valeur de -1 signifie que les données n'expirent pas. Tablestore supprime automatiquement les données dont la période de conservation dépasse cette valeur. Pour définir une valeur autre que -1, désactivez les mises à jour |
Schéma d'index
indexSchema est de type IndexSchema et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldSchemas (obligatoire) |
|
Les champs de l'index. |
|
indexSetting (facultatif) |
|
Les paramètres de l'index. |
|
indexSort (facultatif) |
|
Les paramètres de prétri de l'index. Si ce paramètre n'est pas défini et que l'index ne contient pas de champ Nested, Tablestore trie par clé primaire. Les index Nested ne prennent pas en charge le prétri. |
Champs d'index
Chaque élément de indexSchema.fieldSchemas[] est de type FieldSchema et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
|
Le nom du champ d'index. Le champ peut correspondre à une colonne de clé primaire ou à une colonne d'attribut. |
|
fieldType (obligatoire) |
|
Le type de champ d'index. Utilisez Nested pour les relations multicouches, JSON pour les données au format JSON et Geo-point pour les données géographiques. Vous pouvez également stocker les données au format JSON sous forme de chaînes et les interroger à l'aide de champs array ou Nested. |
|
index (facultatif) |
|
Indique s'il faut créer un index inversé ou spatial pour le champ. Valeur par défaut : |
|
enableHighlighting (facultatif) |
|
Indique s'il faut activer le résumé et la mise en surbrillance. Seuls les champs Text prennent en charge cette fonctionnalité. Valeur par défaut : |
|
analyzer (facultatif) |
|
L'analyseur pour un champ Text. Si ce paramètre n'est pas défini, la tokenisation par caractère unique est utilisée. |
|
analyzerParameter (facultatif) |
|
Les paramètres de l'analyseur. Si vous définissez |
|
enableSortAndAgg (facultatif) |
|
Indique s'il faut activer le tri et l'agrégation. Valeur par défaut : |
|
isArray (facultatif) |
|
Indique si le champ est un tableau. Écrivez les valeurs de tableau sous forme de tableaux JSON. Il n'est pas nécessaire de définir ce paramètre pour les champs Nested. |
|
subFieldSchemas (facultatif) |
|
Les sous-champs d'un champ Nested. Ce paramètre est obligatoire pour un champ Nested. |
|
isVirtualField (facultatif) |
|
Indique si le champ est une colonne virtuelle. Valeur par défaut : |
|
sourceFieldNames (facultatif) |
|
Les champs de la table mappés à la colonne virtuelle. Ce paramètre est obligatoire pour une colonne virtuelle. |
|
dateFormats (facultatif) |
|
Les formats de date pris en charge par un champ Date. Ce paramètre est obligatoire pour un champ Date. |
|
vectorOptions (facultatif) |
|
Le type de données vectorielles, la dimension et la métrique de distance. Ce paramètre est obligatoire pour un champ Vector. |
|
jsonType (facultatif) |
|
Le type d'index d'un champ JSON. Valeurs valides : |
Options vectorielles
indexSchema.fieldSchemas[].vectorOptions est de type VectorOptions et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
dataType (obligatoire) |
|
Le type de données vectorielles. Seul |
|
dimension (obligatoire) |
|
La dimension du vecteur. Valeur maximale : 4 096. |
|
metricType (obligatoire) |
|
La métrique de distance. Valeurs valides :
|
Paramètres d'index
indexSchema.indexSetting est de type IndexSetting et contient le paramètre suivant.
|
Nom |
Type |
Description |
|
routingFields (facultatif) |
|
Les champs de routage personnalisés. Sélectionnez une ou plusieurs colonnes de clé primaire. Dans la plupart des cas, un seul champ suffit. Si vous spécifiez plusieurs champs, Tablestore concatène leurs valeurs. Tablestore utilise les valeurs des champs de routage pour distribuer les données de l'index et écrit les enregistrements ayant les mêmes valeurs dans la même partition de données. |
Prétri d'index
indexSchema.indexSort est de type Sort et contient le paramètre suivant.
|
Nom |
Type |
Description |
|
sorters (facultatif) |
|
Les critères de prétri. |
Tri par clé primaire
Un élément du chemin indexSchema.indexSort.sorters[] dont le type est PrimaryKeySort effectue un prétri par clé primaire et contient le paramètre suivant.
|
Nom |
Type |
Description |
|
order (facultatif) |
|
L'ordre de tri de la clé primaire. Valeurs valides : |
Tri par champ
Un élément du chemin indexSchema.indexSort.sorters[] dont le type est FieldSort effectue un prétri par valeur de champ et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
fieldName (obligatoire) |
|
Le champ utilisé pour le prétri. |
|
order (facultatif) |
|
L'ordre de tri du champ. Valeurs valides : |
|
mode (facultatif) |
|
La méthode de tri pour un champ multivaleur. |
Exemples
Configurer le prétri d'index
L'exemple suivant effectue un prétri des données de l'index par le champ created_at dans l'ordre croissant.
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);
Configurer une TTL d'index
L'exemple suivant configure une TTL de sept jours. Utilisez le SDK Tablestore pour Java version 5.12.0 ou ultérieure.
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);
Créer des colonnes virtuelles
L'exemple suivant mappe le champ Keyword category à une colonne virtuelle Long et le champ Long price à une colonne virtuelle 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);
Activer le résumé et la mise en surbrillance
L'exemple suivant active le résumé et la mise en surbrillance pour le champ 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);