CREATE CORTEX SEARCH SERVICE

Crée un nouveau Cortex Search Service ou remplace un existant.

Syntaxe

CREATE [ OR REPLACE ] CORTEX SEARCH SERVICE [ IF NOT EXISTS ] <name>
  ON <search_column>
  ATTRIBUTES <col_name> [ , ... ]
  WAREHOUSE = <warehouse_name>
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  [ EMBEDDING_MODEL = <embedding_model_name> ]
  [ INITIALIZE = { ON_CREATE | ON_SCHEDULE } ]
  [ COMMENT = '<comment>' ]
AS <query>;

CREATE [ OR REPLACE ] CORTEX SEARCH SERVICE <name>
  TEXT INDEXES <text_column_name> [ , ... ]
  VECTOR INDEXES <column_specification> [ , ... ]
  ATTRIBUTES <col_name> [ , ... ]
  WAREHOUSE = <warehouse_name>
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  [ INITIALIZE = { ON_CREATE | ON_SCHEDULE } ]
  [ COMMENT = '<comment>' ]
AS <query>;
Copy

Paramètres requis

name

Chaîne qui spécifie l’identificateur (c’est-à-dire le nom) du Cortex Search Service ; doit être unique pour le schéma dans lequel le service est créé.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (par exemple, "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus d’informations, voir Exigences relatives à l’identificateur.

ON search_column

Specifies the text column in the base table that you wish to search on, for single-index Cortex Search. This column must be a text value.

TEXT INDEXES text_column_name [, ... ]

Specifies comma-separated text columns in the base table to search on, for multi-index Cortex Search. Columns must be text values.

VECTOR INDEXES column_specification [ , ... ]

Spécifie les colonnes pour les recherches de similarité vectorielle. Les spécifications des colonnes comprennent :

  • Intégrations vectorielles gérées : text_column_name (model='embedding_model'): Spécifie une colonne de texte et le modèle d’intégration utilisés pour la génération de vecteurs. Utilisation obligatoire de l’un des Modèles d’intégration pris en charge. Si aucun modèle n’est spécifié, le modèle par défaut snowflake-arctic-embed-m-v1.5 est utilisé.

  • Intégrations vectorielles fournies par l’utilisateur : vector_column_name: Spécifie une colonne d’intégration vectorielle fournie par l’utilisateur.

  • Intégrations vectorielles fournies par l’utilisateur avec intégrations de requêtes gérées : vector_column_name(query_model='embedding_model'): Spécifie une colonne d’intégration vectorielle fournie par l’utilisateur et le modèle d’intégration utilisé pour l’intégration du texte au moment de la requête. Le query_model doit être l’un des modèles d’intégration vectorielle gérés par Snowflake pris en charge dans Cortex Search. Si aucun query_model n’est spécifié, la colonne vectorielle fournie par l’utilisateur ne peut être utilisée qu’avec une requête d’intégration vectorielle.

Pour plus d’informations sur le comportement des intégrations vectorielles, voir Notes sur l’utilisation.

ATTRIBUTES col_name [ , ... ]

Spécifie la liste séparée par des virgules des colonnes de la table de base sur lesquelles vous souhaitez filtrer lors de l’émission de requêtes au service. Les colonnes d’attributs doivent être incluses dans la requête source, soit via une énumération explicite, soit via un caractère générique, (*).

WAREHOUSE = warehouse_name

Spécifie l’entrepôt à utiliser pour exécuter la requête source, créer l’index de recherche et le maintenir actualisé conformément à la TARGET_LAG cible.

TARGET_LAG = 'num { seconds | minutes | hours | days }'

Spécifie le délai maximum pendant lequel le contenu du Cortex Search Service doit être décalé par rapport aux mises à jour des tables de base dans la requête source.

Paramètres facultatifs

EMBEDDING_MODEL = <embedding_model_name>

Paramètre facultatif qui spécifie le modèle d’intégration à utiliser dans Cortex Search Service. Cette propriété ne peut pas être modifiée après la création de Cortex Search Service. Pour modifier la propriété, recréez Cortex Search Service à l’aide d’une commande CREATE OR REPLACE CORTEX SEARCH SERVICE.

Certains modèles de représentation vectorielle ne sont disponibles que dans certaines régions du Cloud pour Cortex Search. Pour obtenir la liste des disponibilités par modèle et par région, voir Disponibilité régionale Cortex Search.

Chaque modèle peut induire un coût différent par million de jetons d’entrée traités. Reportez-vous à la table de consommation des services Snowflake pour le coût de chaque fonction en crédits par million de jetons.

Si le EMBEDDING_MODEL n’est pas spécifié, le modèle par défaut est utilisé. Le modèle par défaut est snowflake-arctic-embed-m-v1.5.

INITIALIZE

Spécifie le comportement de l”actualisation initiale du Cortex Search Service. Cette propriété ne peut pas être modifiée après la création du service. Pour modifier la propriété, remplacez le Cortex Search Service à l’aide d’une commande CREATE OR REPLACE CORTEX SEARCH SERVICE.

ON_CREATE

Actualise le Cortex Search Service de manière synchrone lors de sa création. Si cette actualisation échoue, la création du service échoue et affiche un message d’erreur.

ON_SCHEDULE

Actualise le Cortex Search Service lors de la prochaine actualisation planifiée.

Le Cortex Search Service est alimenté lors de l’exécution du processus de planification de l’actualisation. Aucune donnée n’est renseignée lors de la création du Cortex Search Service. Si vous essayez d’interroger le service, vous risquez d’obtenir l’erreur suivante car la première actualisation planifiée n’a pas encore eu lieu.

Your service has not yet been loaded into our serving system. Please retry your request in a few minutes.

Par défaut : ON_CREATE

COMMENT = 'comment'

Spécifie un commentaire pour le service.

AS query

Spécifie une requête définissant la table de base à partir de laquelle le service est créé.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

CREATE CORTEX SEARCH SERVICE

Schéma dans lequel vous créez le service de recherche.

SELECT

Tables et vues que le service interroge.

USAGE

Entrepôt qui actualise le service.

Pour effectuer une opération sur un objet dans un schéma, il est nécessaire de disposer d’au moins un privilège sur la base de données parente et d’au moins un privilège sur le schéma parent.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Attention

Pour créer un Cortex Search Service, votre rôle doit disposer des privilèges requis pour utiliser les fonctions d’intégration Cortex. Cela nécessite l’octroi du rôle de base de données SNOWFLAKE.CORTEX_USER ou du rôle de base de données SNOWFLAKE.CORTEX_EMBED_USER au rôle de créateur de service.

Notes sur l’utilisation

Attention

Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

  • La taille de l’entrepôt utilisé pour exécuter la requête source de Cortex Search Service a un impact sur la vitesse et le coût de chaque actualisation. Un entrepôt plus grand réduit le temps de création et d’actualisation. Cependant, au cours de cet aperçu, Snowflake recommande d’utiliser une taille d’entrepôt ne dépassant pas MEDIUM pour les services Cortex Search.

  • Snowflake recommande d’utiliser un entrepôt dédié pour chaque Cortex Search Service afin de ne pas interférer avec d’autres charges de travail.

  • L’index de recherche est construit dans le cadre de l’instruction de création, ce qui signifie que l’instruction CREATE CORTEX SEARCH SERVICE peut prendre plus de temps à se terminer pour des jeux de données plus volumineux.

  • Lors de la création d’un service de recherche multi-index, au moins une colonne doit être spécifiée dans la clause VECTOR INDEXES afin de garantir la plus grande qualité des résultats de recherche. La tentative de créer un service sans index vectoriels renvoie une erreur.

  • Une colonne peut être spécifiée dans la clause TEXT INDEXES, la clause VECTOR INDEXES, ou les deux :

    • Les colonnes spécifiées sous forme d’index de texte peuvent être utilisées pour la recherche par mot-clé (lexical). Lors de l’interrogation d’un index de texte, les résultats sont classés en fonction du degré de similarité lexicale.

    • Les colonnes spécifiées en tant qu’index vectoriels peuvent être utilisées pour la recherche de vecteurs (sémantiques). Lors de l’interrogation d’un index vectoriel, les résultats sont classés en fonction du degré de similarité sémantique.

  • Les colonnes spécifiées à la fois comme index de texte et index vectoriel sont utilisées pour les deux types de recherche.

  • Chaque colonne d’index vectoriel utilise l’une des trois méthodes de gestion des intégrations :

    • Intégrations vectorielles gérées : Snowflake calcule les intégrations vectorielles lorsqu’une colonne de texte est spécifiée dans les clauses ON ou VECTOR INDEXES. Utilisation obligatoire de l’un des Modèles d’intégration pris en charge.

    • Intégrations vectorielles fournies par l’utilisateur : Vous êtes responsable du calcul des intégrations vectorielles avec un modèle d’intégration vectorielle fourni par Snowflake ou un modèle d’intégration hébergé en externe avant l’ingestion par Cortex Search Service, ainsi que pour les entrées de texte au moment de la requête.

    • Intégrations vectorielles fournies par l’utilisateur avec intégrations de requêtes gérées : Vous êtes responsable du calcul des intégrations vectorielles avec l’un des modèles d’intégration vectorielle gérés par Snowflake pris en charge dans Cortex Search avant l’ingestion par Cortex Search Service. Au moment de la requête, Cortex Search intégrera les requêtes de texte en utilisant le query_model spécifié.

Exigences en matière de suivi des modifications

Lors de la création d’un Cortex Search Service, si le suivi des modifications n’est pas déjà activé sur les tables interrogées, Snowflake tente automatiquement d’activer le suivi des modifications sur ces tables. Afin que les actualisations incrémentielles puissent être prises en charge, il faut que le suivi des modifications soit activé avec une rétention Time Travel différente de zéro sur tous les objets sous-jacents utilisés par un Cortex Search Service.

Les objets de base changent, tout comme le Cortex Search Service. Si vous recréez un objet de base, vous devez réactiver le suivi des modifications.

Pour plus d’informations sur l’activation du suivi des modifications, voir Activer le suivi des modifications.

  • Les clauses OR REPLACE et IF NOT EXISTS s’excluent mutuellement. Elles ne peuvent pas être utilisées dans la même instruction.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.

Examples

Créez un Cortex Search Service nommé mysvc en utilisant le modèle d’intégration snowflake-arctic-embed-l-v2.0 :

CREATE OR REPLACE CORTEX SEARCH SERVICE mysvc
  ON transcript_text
  ATTRIBUTES region,agent_id
  WAREHOUSE = mywh
  TARGET_LAG = '1 hour'
  EMBEDDING_MODEL = 'snowflake-arctic-embed-l-v2.0'
AS (
  SELECT
      transcript_text,
      date,
      region,
      agent_id
  FROM support_db.public.transcripts_etl
);
Copy

Créez un Cortex Search Service nommé mysvc, dont la première actualisation est planifiée pour s’exécuter après une période de TARGET_LAG (1 heure).

CREATE OR REPLACE CORTEX SEARCH SERVICE mysvc
  ON transcript_text
  ATTRIBUTES region
  WAREHOUSE = mywh
  TARGET_LAG = '1 hour'
  INITIALIZE = ON_SCHEDULE
AS SELECT * FROM support_db.public.transcripts_etl;
Copy

Créez un service de recherche multi-index nommé business_search_service qui effectue une recherche dans la table business_directory, où :

  • name et address sont spécifiés sous forme d’index de texte, par conséquent, ils sont consultables uniquement par recherche de mots-clés.

  • description est spécifié comme un index vectoriel, par conséquent, il est éligible pour la recherche vectorielle (sémantique) utilisant des intégrations vectorielles gérées et le modèle snowflake-arctic-embed-m-v1.5.

-- Generate sample data
CREATE OR REPLACE TABLE business_directory (name TEXT, address TEXT, description TEXT);
INSERT INTO business_directory VALUES
    ('Joe''s Coffee', '123 Bean St, Brewtown','A cozy café known for artisan espresso and baked goods.'),
    ('Sparkle Wash', '456 Clean Ave, Sudsville', 'Eco-friendly car wash with free vacuum service.'),
    ('Tech Haven', '789 Circuit Blvd, Siliconia', 'Computer store offering the latest gadgets and tech repair services.'),
    ('Joe''s Wash n'' Fold', '456 Apple Ct, Sudsville', 'Laundromat offering coin laundry and premium wash and fold services.'),
    ('Circuit Town', '459 Electron Dr, Sudsville', 'Technology store selling used computer parts at discounted prices.')
;

-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE business_search_service
    TEXT INDEXES name, address
    VECTOR INDEXES description (model='snowflake-arctic-embed-m-v1.5')
    WAREHOUSE = mywh
    TARGET_LAG = '1 hour'
    AS ( SELECT * FROM business_directory );
Copy

Créez un service Cortex Search à multi-index avec des intégrations vectorielles personnalisées appelées custom_vector_search_service. Ce service recherche une table avec une colonne de texte (document_contents) et une colonne d’intégration vectorielle séparée fournie par l’utilisateur (document_embedding) qui contient les intégrations correspondant à la colonne de texte.

Note

Cet exemple utilise des intégrations fictives pour plus de simplicité. Dans un cas d’utilisation en production, les vecteurs doivent être générés par le biais d’un modèle d’intégration vectorielle Snowflake ou un modèle d’intégration hébergée en externe.

-- Generate sample data
CREATE OR REPLACE TABLE business_documents (
  document_contents VARCHAR,
  document_embedding VECTOR(FLOAT, 3)
);
INSERT INTO business_documents VALUES
  ('Quarterly financial report for Q1 2024: Revenue increased by 15%, with expenses stable. Highlights include strategic investments in marketing and technology.', [1, 1, 1]::VECTOR(float, 3)),
  ('IT manual for employees: Instructions for usage of internal technologies, including hardware and software guides and commonly asked tech questions.', [2, 2, 2]::VECTOR(float, 3)),
  ('Employee handbook 2024: Updated policies on remote work, health benefits, and company culture initiatives.', [2, 3, 2]::VECTOR(float, 3)),
  ('Marketing strategy document: Target audience segmentation for upcoming product launch.', [1, -1, -1]::VECTOR(float, 3))
;

-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE custom_vector_search_service
  TEXT INDEXES (document_contents)
  VECTOR INDEXES (document_embedding)
  WAREHOUSE = mywh
  TARGET_LAG = '1 minute'
  AS SELECT * FROM business_documents;
Copy

Créez un service managed_vector_search_service avec des intégrations vectorielles gérées par l’utilisateur et des intégrations de requêtes gérées :

-- Generate sample data
CREATE OR REPLACE TABLE business_documents (
  document_contents VARCHAR
);

INSERT INTO business_documents VALUES
  ('Quarterly financial report for Q1 2024: Revenue increased by 15%, with expenses stable. Highlights include strategic investments in marketing and technology.'),
  ('IT manual for employees: Instructions for usage of internal technologies, including hardware and software guides and commonly asked tech questions.'),
  ('Employee handbook 2024: Updated policies on remote work, health benefits, and company culture initiatives.'),
  ('Marketing strategy document: Target audience segmentation for upcoming product launch.');

-- Add managed vector embeddings
ALTER TABLE business_documents ADD COLUMN document_embeddings VECTOR(FLOAT, 768);
UPDATE business_documents SET document_embeddings = AI_EMBED('snowflake-arctic-embed-m-v1.5', document_contents);

-- Create the Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE managed_vector_search_service
  TEXT INDEXES document_contents
  VECTOR INDEXES document_embedding(query_model='snowflake-arctic-embed-m-v1.5')
  WAREHOUSE = mywh
  TARGET_LAG = '1 minute'
  AS SELECT * FROM business_documents;
Copy