CREATE CORTEX SEARCH SERVICE

Erstellt einen neuen Cortex Search Service oder ersetzt einen bestehenden.

Syntax

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

Erforderliche Parameter

name

Zeichenfolge, die den Bezeichner (d.h. den Namen) für den Cortex Search Service angibt; muss für das Schema, in dem der Dienst erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

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 [ , ... ]

Gibt Spalten für Vektorähnlichkeitssuchen an. Zu den Spaltenspezifikationen gehören:

  • Verwaltete Vektoreinbettungen: text_column_name (model='embedding_model'): Gibt eine Textspalte und das Einbettungsmodell an, das für die Vektorgenerierung verwendet wird. Muss einen der unterstützten Einbettungsmodelle verwenden. Wenn kein Modell angegeben ist, wird das Standardmodell snowflake-arctic-embed-m-v1.5 verwendet.

  • Von Benutzenden bereitgestellte Vektoreinbettungen: vector_column_name: Gibt eine vom Benutzer bereitgestellte Vektoreinbettungsspalte an.

  • Von Benutzenden bereitgestellte Vektoreinbettungen mit verwalteten Abfrageeinbettungen: vector_column_name(query_model='embedding_model'): Gibt eine vom Benutzer bereitgestellte Vektoreinbettungsspalte und das Einbettungsmodell an, das für die Einbettung von Text zur Abfragezeit verwendet wird. Das query_model muss eines der von Snowflake verwalteten Einbettungsmodelle sein, die in Cortex Search unterstützt werden. Wenn kein query_model angegeben ist, kann die vom Benutzenden bereitgestellte Vektorspalte nur mit einer Vektoreinbettungsabfrage verwendet werden.

Informationen zum Verhalten von Vektoreinbettungen finden Sie unter Nutzungshinweise.

ATTRIBUTES col_name [ , ... ]

Gibt eine durch Kommas getrennte Liste von Spalten in der Basistabelle an, nach denen Sie bei Abfragen an den Dienst filtern möchten. Attributspalten müssen in der Abfrage enthalten sein, entweder über eine explizite Aufzählung oder einen Platzhalter (*).

WAREHOUSE = warehouse_name

Gibt das Warehouse an, das für die Ausführung der Abfrage, den Aufbau des Suchindex und dessen Aktualisierung gemäß dem TARGET_LAG-Ziel verwendet wird.

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

Gibt die maximale Zeitspanne an, die der Inhalt des Cortex Search Service hinter den Aktualisierungen der in der Abfrage angegebenen Basistabellen zurückbleiben darf.

Optionale Parameter

EMBEDDING_MODEL = <embedding_model_name>

Optionaler Parameter, der das Einbettungsmodell angibt, das in Cortex Search Service verwendet werden soll. Diese Eigenschaft kann nicht mehr geändert werden, nachdem Sie den Cortex Search Service erstellt haben. Um die Eigenschaft zu ändern, erstellen Sie den Cortex Search Service mit einem CREATE OR REPLACE CORTEX SEARCH SERVICE-Befehl neu.

Einige Einbettungsmodelle sind für Cortex Search nur in bestimmten Regionen der Cloud verfügbar. Eine Liste der Verfügbarkeit nach Modell und Region finden Sie unter Regionale Verfügbarkeit von Cortex Search.

Jedes Modell kann unterschiedliche Kosten pro Million verarbeiteter Eingabetoken verursachen. Die Kosten für jede Funktion in Credits pro Million Token finden Sie in der Snowflake Service Consumption Table.

Wenn das EMBEDDING_MODEL nicht angegeben wird, wird das Standardmodell verwendet. Das Standardmodell ist snowflake-arctic-embed-m-v1.5.

INITIALIZE

Legt die Verhaltensweise der anfänglichen Aktualisierung des Cortex Search Service fest. Diese Eigenschaft kann nicht mehr geändert werden, nachdem Sie den Dienst erstellt haben. Um die Eigenschaft zu ändern, ersetzen Sie den Cortex Search Service durch einen CREATE OR REPLACE CORTEX SEARCH SERVICE-Befehl.

ON_CREATE

Aktualisiert den Cortex Search Service synchron bei der Erstellung. Wenn diese Aktualisierung fehlschlägt, schlägt die Erstellung des Dienstes fehl und es wird eine Fehlermeldung angezeigt.

ON_SCHEDULE

Aktualisiert den Cortex Search Service bei der nächsten geplanten Aktualisierung.

Der Cortex Search Service wird aufgefüllt, wenn der Aktualisierungszeitplan-Prozess läuft. Bei der Erstellung des Cortex Search Service werden keine Daten eingegeben. Wenn Sie versuchen, den Dienst abzufragen, wird möglicherweise der folgende Fehler angezeigt, da die erste geplante Aktualisierung noch nicht stattgefunden hat.

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

Standard: ON_CREATE

COMMENT = 'comment'

Gibt einen Kommentar für den Dienst an.

AS query

Gibt eine Abfrage an, die die Basistabelle definiert, aus der der Dienst erstellt wird.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

CREATE CORTEX SEARCH SERVICE

Schema, in dem Sie den Suchservice erstellen.

SELECT

Tabellen und Ansichten, die der Service abfragt.

USAGE

Warehouse, das den Service aktualisiert.

Für das Ausführen von Operationen auf einem Objekt in einem Schema ist mindestens eine Berechtigung für die übergeordnete Datenbank und mindestens eine Berechtigung für das übergeordnete Schema erforderlich.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Achtung

Um einen Cortex Search Service zu erstellen, muss Ihre Rolle über die erforderlichen Berechtigungen zur Nutzung der Cortex-Einbettungsfunktionen verfügen. Dies setzt voraus, dass der Rolle des Serviceerstellers die SNOWFLAKE.CORTEX_USER-Datenbankrolle oder die SNOWFLAKE.CORTEX_EMBED_USER-Datenbankrolle gewährt wurde.

Nutzungshinweise

Achtung

Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „User“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

  • Die Größe des Warehouses, das für die Cortex Search Service-Ausgangsabfrage verwendeten Warehouses wirkt sich auf die Geschwindigkeit und die Kosten der einzelnen Aktualisierungen aus. Ein größeres Warehouse verkürzt die Erstellungs- und Aktualisierungszeit. Während dieser Vorschau empfiehlt Snowflake jedoch, für die Cortex Search Services eine Warehouse-Größe von maximal MEDIUM zu verwenden.

  • Snowflake empfiehlt, für jeden Cortex Search Service ein eigenes Warehouse zu verwenden, um andere Workloads nicht zu beeinträchtigen.

  • Der Suchindex wird als Teil der CREATE-Anweisung erstellt, was bedeutet, dass die Anweisung CREATE CORTEX SEARCH SERVICE bei größeren Datasets länger dauern kann.

  • Beim Erstellen eines Multi-Index-Suchservices muss mindestens eine Spalte in der VECTOR INDEXES-Klausel angegeben werden, um die höchste Qualität der Suchergebnisse zu gewährleisten. Der Versuch, einen Service ohne Vektorindizes zu erstellen, führt zu einem Fehler.

  • In der TEXT INDEXES-Klausel kann eine Spalte angegeben werden oder in der VECTOR INDEXES-Klausel oder in beiden:

    • Spalten, die als Textindizes spezifiziert sind, können für die (lexikalische) Suche mit Schlüsselwörtern verwendet werden. Beim Abfragen eines Textindexes werden die Ergebnisse auf der Grundlage des Grades der lexikalischen Ähnlichkeit bewertet.

    • Spalten, die als Vektorindizes spezifiziert sind, können für die (semantische) Vektorsuche verwendet werden. Beim Abfragen eines Vektorindexes werden die Ergebnisse auf der Grundlage des Grades der semantischen Ähnlichkeit bewertet.

  • Spalten, die sowohl als Text- als auch als Vektorindizes angegeben sind, werden für beide Suchtypen verwendet.

  • Jede Vektorindexspalte verwendet eine von drei Methoden zur Verwaltung von Einbettungen:

    • Verwaltete Vektoreinbettungen: Snowflake berechnet die Vektoreinbettungen, wenn eine Textspalte entweder in der ON-Klausel oder in der VECTOR INDEXES-Klausel angegeben ist. Muss einen der unterstützten Einbettungsmodelle verwenden.

    • Von Benutzenden bereitgestellte Vektoreinbettungen: Sie sind für die Berechnung der Vektoreinbettungen mit einem von Snowflake bereitgestelltes Vektoreinbettungsmodell oder einem extern gehosteten Einbettungsmodell vor der Aufnahme durch den Cortex Search Service verantwortlich, auch für Texteingaben zur Abfragezeit.

    • Von Benutzenden bereitgestellte Vektoreinbettungen mit verwalteten Abfrageeinbettungen: Sie sind für die Berechnung der Vektoreinbettungen mit einem der von Snowflake verwalteten Einbettungsmodelle, die in Cortex Search unterstützt werden, vor der Aufnahme durch den Cortex Search Service verantwortlich. Zur Abfragezeit bettet Cortex Search Textabfragen unter Verwendung des angegebenen :samp:`query_model`s ein.

Anforderungen an die Änderungsverfolgung

Wenn beim Erstellen eines Cortex Search Service die Änderungsverfolgung für die abgefragten Tabellen noch nicht aktiviert ist, versucht Snowflake automatisch, die Änderungsverfolgung für sie zu aktivieren. Um inkrementelle Aktualisierungen zu unterstützen, muss die Änderungsverfolgung mit Nicht-Null-Time Travel-Aufbewahrungsfrist für alle zugrunde liegenden Objekte, die von einem Cortex Search Service verwendet werden, aktiviert sein.

Bei Änderungen an den Basisobjekten ändert sich auch der Cortex Search Service. Wenn Sie ein Objekt neu erstellen, müssen Sie die Änderungsverfolgung wieder aktivieren.

Weitere Informationen zur Aktivierung der Änderungsverfolgung finden Sie unter Änderungsverfolgung aktivieren.

  • Die Klauseln OR REPLACE und IF NOT EXISTS schließen sich gegenseitig aus. Sie können nicht beide in der gleichen Anweisung verwendet werden.

  • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

Examples

Erstellen Sie einen Cortex Search Service namens mysvc unter Verwendung des snowflake-arctic-embed-l-v2.0-Einbettungsmodells:

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

Erstellen Sie einen Cortex Search Service mit dem Namen mysvc, wobei die erste Aktualisierung nach Ablauf eines TARGET_LAG-Zeitraums (1 Stunde) erfolgen soll.

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

Erstellen Sie einen Multi-Index-Suchservices namens business_search_service, der die Tabelle business_directory durchsucht, wobei Folgendes gilt:

  • name und address werden als Textindizes angegeben, so dass sie nur mit der Schlüsselwortsuche durchsucht werden können.

  • description wird als Vektorindex angegeben, sodass es für die (semantische) Vektorsuche unter Verwendung von verwalteten Vektoreinbettungen und dem snowflake-arctic-embed-m-v1.5-Modell in Frage kommt.

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

Erstellen Sie einen Multi-Index-Cortex Search-Service mit benutzerdefinierten Vektoreinbettungen namens custom_vector_search_service. Dieser Service durchsucht eine Tabelle mit einer Textspalte (document_contents) und eine separate, vom Benutzenden bereitgestellte Vektoreinbettungsspalte (document_embedding), die Einbettungen enthält, die der Textspalte entsprechen.

Bemerkung

In diesem Beispiel werden der Einfachheit halber Mock-Einbettungen verwendet. In einem Anwendungsfall für die Produktion sollten Vektoren über ein Snowflake-Vektoreinbettungsmodell oder ein extern gehostetes Einbettungsmodell generiert werden.

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

Erstellen Sie einen managed_vector_search_service mit benutzerverwalteten Vektoreinbettungen und verwalteten Abfrageeinbettungen:

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