Interroger un Cortex Search Service¶
Lorsque vous créez un Cortex Search Service, le point de terminaison d’une REST API est configuré pour répondre aux requêtes adressées au service. Vous avez deux options pour interroger un Cortex Search Service :
Utilisation de Snowflake Python APIs
Utilisez un client de votre choix pour interroger le point de terminaison REST directement
Snowflake Python APIs¶
Les Cortex Search Services peuvent être interrogés à l’aide de la version 0.8.0 ou ultérieure du Snowflake Python APIs, actuellement en avant-première. Consultez Snowflake Python APIs : gestion des objets Snowflake avec Python pour plus d’informations sur le Snowflake Python APIs.
Installez la bibliothèque Snowflake Python APIs.¶
Tout d’abord, installez la dernière version du paquet Snowflake Python APIs depuis PyPI. Consultez Installez la bibliothèque Snowflake Python APIs. pour obtenir des instructions sur l’installation de ce paquet à partir de PyPI.
pip install snowflake -U
Se connecter à Snowflake¶
Connectez-vous à Snowflake en utilisant une Session
Snowpark ou une Connection
Python Connector et créez un objet Root
. Consultez Connexion à Snowflake avec Snowflake Python APIs pour plus d’instructions sur la connexion à Snowflake. L’exemple suivant utilise l’objet de la Session
Snowpark et un dictionnaire Python pour la configuration.
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)
Interroger le service¶
Interrogez le service en utilisant la syntaxe suivante :
# 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())
Note
Version 0.8.0 ou ultérieure de la bibliothèque Snowflake Python APIs est nécessaire pour interroger un Cortex Search Service.
Rest API¶
Cortex Search expose un point de terminaison REST API dans la suite de Snowflake REST APIs, actuellement en avant-première. Le point de terminaison REST généré pour un Cortex Search Service présente la structure suivante :
https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
Où :
<account_url>
: L’URL de votre compte Snowflake. Consultez Recherche de l’organisation et du nom de compte pour un compte pour savoir comment trouver l’URL de votre compte.<db_name>
: Base de données dans laquelle réside le service.<schema_name>
: Schéma dans lequel réside le service.<service_name>
: Nom du service.:query
: La méthode à invoquer sur le service. Dans ce cas, la méthodequery
.
Pour plus de détails, consultez la référence REST API pour le Cortex Search Service. Ce qui suit décrit les paramètres et la syntaxe de filtre à utiliser lors de l’interrogation du service.
Paramètres¶
Paramètre |
Description |
---|---|
|
Votre requête de recherche, pour rechercher dans la colonne de texte du service. |
|
Une liste de colonnes séparées par des virgules à renvoyer pour chaque résultat pertinent dans la réponse. Ces colonnes doivent être incluses dans la requête source du service. |
|
Un objet de filtre pour filtrer les résultats en fonction des données dans les colonnes |
|
Nombre maximal de résultats à renvoyer dans la réponse.
La valeur maximale acceptée est 1000.
La valeur par défaut est 10.
|
Syntaxe de filtre¶
Cortex Search prend en charge le filtrage sur les colonnes ATTRIBUTES spécifiées dans la commande CREATE CORTEX SEARCH SERVICE.
Cortex Search prend en charge deux opérateurs de correspondance :
Égalité des chaînes :
@eq
La table contient :
@contains
Ces opérateurs de correspondance peuvent être composés de différents opérateurs logiques :
@and
@or
@not
Ces opérateurs peuvent être combinés en un seul objet filtre. Voici quelques exemples :
Le filtrage sur les lignes où se trouve une colonne de type chaîne
string_col
est égal à la valeurvalue
.{ "@eq": { "string_col": "value" } }
Filtrage sur les lignes où la colonne ARRAY
array_col
contient de la valeurvalue
.{ "@contains": { "array_col": "arr_value" } }
Composition de filtres avec des opérateurs logiques :
// 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" } } ] }
Configurer l’authentification REST API¶
Les REST APIs Snowflake prennent actuellement en charge l’authentification via l’authentification par paire de clés et OAuth. Pour plus de détails, voir Authentification d”Snowflake REST APIs avec Snowflake.
Exemple d’interrogation du service¶
Pour interroger le service en utilisant curl et une authentification par paire de clés :
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>
}'
Note
Lors de l’interrogation de la REST API avec une authentification JWT, le rôle par défaut de l’utilisateur est utilisé. Ainsi, le rôle par défaut de l’utilisateur qui interroge le service doit avoir USAGE sur la base de données et le schéma dans lesquels réside le service, et sur le service lui-même. Le rôle d’utilisateur interrogateur n’a pas nécessairement besoin de privilèges sur les données de la requête source. Consultez Rôles utilisateur pour plus de détails sur les rôles des utilisateurs.
Service de prévisualisation avec le Fonctionnement du système SQL¶
La fonction SNOWFLAKE.CORTEX.SEARCH_PREVIEW vous permet de prévisualiser les résultats des requêtes individuelles adressées à un Cortex Search Service à partir d’un environnement SQL tel qu’une feuille de calcul ou une cellule de carnet Snowflake. Cette fonction permet de valider rapidement et facilement qu’un service est correctement renseigné et fournit des résultats raisonnables.
Exemple¶
L’exemple suivant prévisualise le service avec la chaîne de requête preview query
et analyse les résultats dans un objet VARIANT.
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;
Exigences en matière de contrôle d’accès¶
Le rôle qui interroge le Cortex Search Service doit disposer des privilèges suivants pour récupérer les résultats :
Privilège
Objet
USAGE
Le Cortex Search Service
USAGE
La base de données dans laquelle réside le Cortex Search Service
USAGE
Le schéma dans lequel réside le Cortex Search Service