Tous les produits
Search
Centre de documentation

Tablestore:Create a search index

Dernière mise à jour :Aug 18, 2026

Utilisez la méthode CreateSearchIndex pour créer un index de recherche sur une table de données. Une table de données peut comporter plusieurs index de recherche. Lors de la création d'un index de recherche, vous devez ajouter à l'index les champs que vous souhaitez interroger. Vous pouvez également configurer des options avancées, telles que le routage personnalisé et le prétri.

Prérequis

Remarques d'utilisation

Les types de données des champs dans l'index de recherche doivent correspondre aux types de données des champs correspondants dans la table de données.

API

/**
 * Create a search index.
 * @api
 *
 * @param [] $request
 *            The request parameters, such as the table name and index configuration.
 * @return [] The response.
 * @throws OTSClientException Thrown if a parameter check fails or the server returns a verification error.
 * @throws OTSServerException Thrown if the Tablestore server returns an error.
 * @example "src/examples/CreateSearchIndex.php"
 */
public function createSearchIndex(array $request)

Paramètres

Spécifiez le nom de la table (table_name), le nom de l'index de recherche (index_name) et le schéma de l'index (schema). Le schéma comprend field_schemas (paramètres des champs), index_setting (paramètres de l'index) et index_sort (paramètres de prétri).

Paramètre

Description

table_name

Le nom de la table de données.

index_name

Le nom de l'index de recherche.

field_schemas

La liste des schémas de champ. Chaque field_schema inclut les paramètres suivants :

  • field_name (obligatoire) : le nom du champ à indexer, qui correspond au nom de la colonne. Type de données : String.

    Le champ peut être une colonne de clé primaire ou une colonne d'attribut.

  • field_type (obligatoire) : le type de données du champ, au format FieldTypeConst::XXX.

  • is_array (facultatif) : indique si la colonne est un tableau. Type de données : Boolean.

    Si ce paramètre est défini sur true, la colonne stocke des données de type tableau. Écrivez les données au format de tableau JSON, par exemple ["a","b","c"].

    Les champs imbriqués sont des tableaux par défaut. Si field_type est Nested, ignorez ce paramètre.

  • index (facultatif) : indique s'il faut activer l'indexation pour la colonne. Type de données : Boolean.

    Valeur par défaut : true, ce qui génère un index inversé ou un index spatial pour la colonne. Définissez ce paramètre sur false pour ignorer l'indexation.

  • analyzer (facultatif) : le type de tokenisation. S'applique uniquement aux champs Text. Valeur par défaut : tokenisation par mot unique.

  • enable_sort_and_agg (facultatif) : indique s'il faut activer le tri et l'agrégation. Type de données : Boolean.

    Seuls les champs dont le paramètre enable_sort_and_agg est défini sur true prennent en charge le tri.

    Important

    Les champs de type Nested ne prennent pas en charge le tri et l'agrégation. Toutefois, les sous-colonnes au sein d'un champ Nested prennent en charge cette fonctionnalité.

index_setting

Paramètres de l'index, y compris le paramètre routing_fields.

routing_fields (facultatif) : Champs de routage personnalisés. Sélectionnez certaines colonnes de clé primaire comme champs de routage. Dans la plupart des cas, il suffit d'en définir un seul. Si vous définissez plusieurs clés de routage, le système concatène leurs valeurs en une seule valeur.

Lors de l'écriture des données d'index, le système calcule l'emplacement de distribution des données d'index en fonction des valeurs des champs de routage. Les enregistrements ayant les mêmes valeurs de champ de routage sont indexés dans la même partition de données.

index_sort

Paramètres de prétri de l'index, y compris le paramètre sorters. Valeur par défaut : tri par clé primaire.

Remarque

Les index contenant des champs de type Nested ne prennent pas en charge index_sort et ne sont pas prétriés.

sorters (obligatoire) : la méthode de prétri pour l'index de recherche. Prend en charge PrimaryKeySort et FieldSort. Pour plus d'informations, consultez la rubrique Tri et pagination.

  • PrimaryKeySort : trie les données par clé primaire. Comprend le paramètre suivant :

    order : l'ordre de tri, croissant ou décroissant. Valeur par défaut : croissant (SortOrderConst::SORT_ORDER_ASC).

  • FieldSort : trie les données par valeur de champ. Comprend les paramètres suivants :

    Seuls les champs indexés avec le tri et l'agrégation activés peuvent être prétriés.

    • field_name : le nom du champ utilisé pour le tri.

    • order : l'ordre de tri, croissant ou décroissant. Valeur par défaut : croissant (SortOrderConst::SORT_ORDER_ASC).

    • mode : la méthode de tri à utiliser lorsqu'un champ comporte plusieurs valeurs.

Exemple

Créez un index de recherche avec les colonnes suivantes : keyword (Keyword), text (Text), geo (Geo-point), long (Long), double (Double), boolean (Boolean), array (Keyword) et nested (Nested). La colonne nested contient une sous-colonne nested_keyword de type Keyword. L'index est prétrié par clé primaire et n'expire jamais.

$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'schema' => array(
        'field_schemas' => array(
            array(
                'field_name' => 'keyword',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'text',
                'field_type' => FieldTypeConst::TEXT,
                'analyzer' => 'single_word',
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'geo',
                'field_type' => FieldTypeConst::GEO_POINT,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'long',
                'field_type' => FieldTypeConst::LONG,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'double',
                'field_type' => FieldTypeConst::DOUBLE,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'boolean',
                'field_type' => FieldTypeConst::BOOLEAN,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'array',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => true
            ),
            array(
                'field_name' => 'nested',
                'field_type' => FieldTypeConst::NESTED,
                'index' => false,
                'enable_sort_and_agg' => false,
                'field_schemas' => array(
                    array(
                        'field_name' => 'nested_keyword',
                        'field_type' => FieldTypeConst::KEYWORD,
                        'index' => false,
                        'enable_sort_and_agg' => false,
                        'is_array' => false
                    )
                )
            ),
        ),
        'index_setting' => array(
            'routing_fields' => array("pk1")
        ),
//        "index_sort" => array(// Indexes that contain Nested type fields do not support index_sort and are not presorted.
//            array(
//                'field_sort' => array(
//                    'field_name' => 'keyword',
//                    'order' => SortOrderConst::SORT_ORDER_ASC,
//                    'mode' => SortModeConst::SORT_MODE_AVG,
//                )
//            ),
//            array(
//                'pk_sort' => array(
//                    'order' => SortOrderConst::SORT_ORDER_ASC
//                )
//            ),
//        )
    )
);
$response = $otsClient->createSearchIndex($request);

FAQ

Références