Abfrage eines Cortex Search Service

Wenn Sie einen Cortex Search Service erstellen, wird ein REST API-Endpunkt bereitgestellt, um Abfragen an den Service zu liefern. Sie haben zwei Möglichkeiten, einen Cortex Search Service abzufragen:

  • Snowflake Python APIs verwenden

  • Verwenden Sie einen Client Ihrer Wahl, um den REST-Endpunkt direkt abzufragen

Snowflake Python APIs

Cortex Search Services können mit der Version 0.8.0 oder höher von Snowflake Python APIs abgefragt werden, das sich derzeit in der Vorschau befindet. Weitere Informationen zu Snowflake Python APIs finden Sie unter Snowflake Python APIs: Verwalten von Snowflake-Objekten mit Python.

Installieren der Snowflake Python APIs-Bibliothek

Installieren Sie zunächst die neueste Version des Pakets Snowflake Python APIs von PyPI. Siehe Installieren der Snowflake Python APIs-Bibliothek für Anweisungen zur Installation dieses Pakets von PyPI.

pip install snowflake -U
Copy

Mit Snowflake verbinden

Stellen Sie die Verbindung zu Snowflake entweder über einen Snowpark-Session oder einen Python Connector Connection her und erstellen Sie ein Root Objekt. Unter Verbinden mit Snowflake mit dem Snowflake Python APIs finden Sie weitere Anweisungen zur Verbindung mit Snowflake. Das folgende Beispiel verwendet das Snowpark Session-Objekt und ein Python Wörterbuch für die Konfiguration.

import os
from snowflake.core import Root
from snowflake.snowpark import Session

CONNECTION_PARAMETERS = {
    "account": os.environ["snowflake_account_demo"],
    "user": os.environ["snowflake_user_demo"],
    "password": os.environ["snowflake_password_demo"],
    "role": "test_role",
    "database": "test_database",
    "warehouse": "test_warehouse",
    "schema": "test_schema",
}

session = Session.builder.configs(CONNECTION_PARAMETERS).create()
root = Root(session)
Copy

Den Dienst abfragen

Fragen Sie den Dienst mit der folgenden Syntax ab:

# fetch service
my_service = (root
  .databases["<service_database>"]
  .schemas["<service_schema>"]
  .cortex_search_services["<service_name>"]
)

# query service
resp = my_service.search(
  query="<query>",
  columns=["<col1>", "<col2>"],
  filter={"@eq": {"<column>": "<value>"} },
  limit=5
)
print(resp.to_json())
Copy

Bemerkung

Version 0.8.0 oder höher der Snowflake Python APIs-Bibliothek ist erforderlich, um einen Cortex Search Service abzufragen.

Rest API

Cortex Search stellt einen REST API-Endpunkt in der Suite von Snowflake REST APIs zur Verfügung, der sich derzeit in der Vorschau befindet. Der für einen Cortex Search Service generierte REST-Endpunkt hat die folgende Struktur:

https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
Copy

Wobei:

  • <account_url>: URL Ihres Snowflake-Kontos Unter Suchen von Organisations- und Kontonamen eines Kontos finden Sie Anweisungen zum Auffinden Ihres Kontos URL.

  • <db_name>: Datenbank, in der sich der Dienst befindet.

  • <schema_name>: Schema, in dem sich der Dienst befindet

  • <service_name>: Name des Dienstes.

  • :query: Die Methode, die für den Dienst aufgerufen werden soll. In diesem Fall ist es die query-Methode.

Weitere Einzelheiten finden Sie in der REST API-Referenz für Cortex Search Service. Im Folgenden werden die Parameter und die Syntax des Filters beschrieben, die Sie bei der Abfrage des Dienstes verwenden müssen.

Parameter

Parameter

Beschreibung

query

Ihre Abfrage, um die Textspalte im Dienst zu durchsuchen.

columns

Eine durch Kommata getrennte Liste von Spalten, die für jedes relevante Ergebnis in der Antwort zurückgegeben werden soll. Diese Spalten müssen in der Quellabfrage für den Dienst enthalten sein.

filter

Ein Filterobjekt zum Filtern der Ergebnisse auf der Grundlage der Daten in den ATTRIBUTES-Spalten. Siehe Filtersyntax.

limit

Maximale Anzahl der Ergebnisse, die in der Antwort zurückgegeben werden sollen
Der maximal akzeptierte Wert ist 1000.
Der Standardwert ist 10.

Filtersyntax

Cortex Search unterstützt das Filtern nach den ATTRIBUTES-Spalten, die im Befehl CREATE CORTEX SEARCH SERVICE angegeben sind.

Cortex Search unterstützt zwei Abgleichsoperatoren:

  • Zeichenfolgengleichheit: @eq

  • Array enthält: @contains

Diese Vergleichsoperatoren können mit verschiedenen logischen Operatoren kombiniert werden:

  • @and

  • @or

  • @not

Diese Operatoren können in einem einzigen Filterobjekt kombiniert werden. Es folgen Beispiele:

  • Filtern von Zeilen, bei denen die Zeichenfolge-ähnliche Spalte string_col gleich dem Wert value ist.

    { "@eq": { "string_col": "value" } }
    
    Copy
  • Filtern nach Zeilen, in denen die Spalte ARRAY array_col den Wert value enthält.

    { "@contains": { "array_col": "arr_value" } }
    
    Copy
  • Zusammenstellen von Filtern mit logischen Operatoren:

    // Rows where the "array_col" column contains "arr_value" and the "string_col" column equals "value":
    {
        "@and": [
          { "@contains": { "array_col": "arr_value" } },
          { "@eq": { "string_col": "value" } }
        ]
    }
    
    // Rows where the "string_col" column does not equal "value"
    {
      "@not": { "@eq": { "string_col": "value" } }
    }
    
    // Rows where the "array_col" column contains at least one of "val1", "val2", or "val3"
    {
      "@or": [
          { "@contains": { "array_col": "val1" } },
          { "@contains": { "array_col": "val1" } },
          { "@contains": { "array_col": "val1" } }
      ]
    }
    
    Copy

REST API-Authentifizierung konfigurieren

Snowflake REST APIs unterstützt derzeit die Authentifizierung über Schlüsselpaar-Authentifizierung und OAuth. Weitere Details dazu finden Sie unter Authentifizierung von Snowflake REST APIs mit Snowflake.

Beispiel für die Abfrage des Dienstes

So fragen Sie den Dienst ab: curl und Authentifizierung des Schlüsselpaares:

curl --location https://<ACCOUNT_URL>/api/v2/databases/<DB_NAME>/schemas/<SCHEMA_NAME>/cortex-search-services/<SERVICE_NAME>\:query \
--header 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $CORTEX_SEARCH_JWT" \
--data '{
  "query": "<search_query>",
  "columns": ["col1", "col2"],
  "filter": <filter>
  "limit": <limit>
}'
Copy

Bemerkung

Bei der Abfrage der REST API unter Verwendung von JWT-Authentifizierung wird die Standardrolle des Benutzers verwendet. Die Standardrolle des Benutzers, der den Dienst abfragt , muss also USAGE für die Datenbank und das Schema, in dem sich der Dienst befindet, sowie für den Dienst selbst haben. Die Rolle des abfragenden Benutzers benötigt nicht unbedingt Berechtigungen für die Daten in der Quellabfrage. Weitere Informationen zu Benutzerrollen finden Sie unter Benutzerrollen.

Dienstvorschau mit SQL-Systemfunktion

Mit der Funktion SNOWFLAKE.CORTEX.SEARCH_PREVIEW können Sie eine Vorschau der Ergebnisse einzelner Abfragen an einen Cortex Search Service aus einer SQL Umgebung wie einem Arbeitsblatt oder einer Snowflake-Notebook-Zelle heraus anzeigen. Mit dieser Funktion können Sie schnell und einfach überprüfen, ob ein Service korrekt ausgefüllt ist und vernünftige Ergebnisse liefert.

Beispiel

Das folgende Beispiel zeigt eine Vorschau des Services mit der Abfragezeichenfolge preview query und analysiert die Ergebnisse in einem VARIANT-Objekt.

SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
      'my_search_service',
      '{
         "query": "preview query",
         "columns":[
            "col1",
            "col2"
         ],
         "filter": {"@eq": {"col1": "filter value"} },
         "limit":10
      }'
  )
)['results'] as results;
Copy

Anforderungen an die Zugriffssteuerung

Die Rolle, die den Cortex Search Service abfragt, muss über die folgenden Berechtigungen verfügen, um Ergebnisse abrufen zu können:

Berechtigung

Objekt

USAGE

Der Cortex Search Service

USAGE

Die Datenbank, in der sich der Cortex Search Service befindet

USAGE

Das Schema, in dem sich der Cortex Search Service befindet