Tous les produits
Search
Centre de documentation

Tablestore:Create a search index

Dernière mise à jour :Aug 18, 2026

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 UpdateRow sont 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)
Remarque

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)

String

Le nom de la table.

indexName (obligatoire)

String

Le nom de l'index de recherche.

indexSchema (obligatoire)

IndexSchema

Le schéma de l'index.

sourceIndexName (facultatif)

String

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)

Integer

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 UpdateRow pour la table. La TTL de l'index ne peut pas dépasser la TTL de la table. Après la création de l'index, vous pouvez appeler updateSearchIndex pour modifier la valeur. Pour spécifier la TTL en jours, appelez setTimeToLiveInDays. Pour plus d'informations, consultez Configurer la TTL d'un index de recherche.

Schéma d'index

indexSchema est de type IndexSchema et contient les paramètres suivants.

Nom

Type

Description

fieldSchemas (obligatoire)

List<FieldSchema>

Les champs de l'index.

indexSetting (facultatif)

IndexSetting

Les paramètres de l'index.

indexSort (facultatif)

Sort

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)

String

Le nom du champ d'index. Le champ peut correspondre à une colonne de clé primaire ou à une colonne d'attribut.

fieldType (obligatoire)

FieldType

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)

boolean

Indique s'il faut créer un index inversé ou spatial pour le champ. Valeur par défaut : true. Si la valeur est définie sur false, aucun index n'est créé pour le champ.

enableHighlighting (facultatif)

boolean

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 : false.

analyzer (facultatif)

String

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)

AnalyzerParameter

Les paramètres de l'analyseur. Si vous définissez analyzer, vous devez configurer les paramètres requis par cet analyseur.

enableSortAndAgg (facultatif)

boolean

Indique s'il faut activer le tri et l'agrégation. Valeur par défaut : true. Les champs Text ne prennent pas en charge le tri ou l'agrégation. Pour trier ou agréger du contenu Text, créez une colonne virtuelle Keyword.

isArray (facultatif)

boolean

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)

List<FieldSchema>

Les sous-champs d'un champ Nested. Ce paramètre est obligatoire pour un champ Nested.

isVirtualField (facultatif)

boolean

Indique si le champ est une colonne virtuelle. Valeur par défaut : false.

sourceFieldNames (facultatif)

List<String>

Les champs de la table mappés à la colonne virtuelle. Ce paramètre est obligatoire pour une colonne virtuelle.

dateFormats (facultatif)

List<String>

Les formats de date pris en charge par un champ Date. Ce paramètre est obligatoire pour un champ Date.

vectorOptions (facultatif)

VectorOptions

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)

JsonType

Le type d'index d'un champ JSON. Valeurs valides : OBJECT et NESTED. Ce paramètre est obligatoire pour un champ JSON.

Options vectorielles

indexSchema.fieldSchemas[].vectorOptions est de type VectorOptions et contient les paramètres suivants.

Nom

Type

Description

dataType (obligatoire)

VectorDataType

Le type de données vectorielles. Seul FLOAT_32 est pris en charge.

dimension (obligatoire)

Integer

La dimension du vecteur. Valeur maximale : 4 096.

metricType (obligatoire)

VectorMetricType

La métrique de distance. Valeurs valides : EUCLIDEAN, COSINE et DOT_PRODUCT. Un score plus élevé indique une plus grande similarité.

EUCLIDEAN mesure la distance en ligne droite et omet le calcul final de la racine carrée dans Tablestore. COSINE mesure le cosinus de l'angle entre les vecteurs et est couramment utilisé pour la similarité textuelle. DOT_PRODUCT multiplie les coordonnées correspondantes de vecteurs de même dimension et additionne les résultats. Pour plus d'informations, consultez Algorithmes de métriques de distance.

Paramètres d'index

indexSchema.indexSetting est de type IndexSetting et contient le paramètre suivant.

Nom

Type

Description

routingFields (facultatif)

List<String>

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)

List<Sort.Sorter>

Les critères de prétri. PrimaryKeySort trie par clé primaire et FieldSort trie par valeur de champ. Les champs utilisés dans FieldSort doivent être indexés avec le tri et l'agrégation activés. Pour plus d'informations, consultez Trier et paginer les résultats.

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)

SortOrder

L'ordre de tri de la clé primaire. Valeurs valides : SortOrder.ASC et SortOrder.DESC. Valeur par défaut : SortOrder.ASC.

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)

String

Le champ utilisé pour le prétri.

order (facultatif)

SortOrder

L'ordre de tri du champ. Valeurs valides : SortOrder.ASC et SortOrder.DESC. Valeur par défaut : SortOrder.ASC.

mode (facultatif)

SortMode

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);