查询 Cortex Search 服务¶
当您创建 Cortex Search 服务时,系统会配置一个 REST API 端点,以便向服务提供查询。查询 Cortex Search 服务有两种方法:
使用 Snowflake Python APIs
使用自己选择的客户端直接查询 REST 端点
Snowflake Python APIs¶
可使用 Snowflake Python APIs 的 0.8.0 或更高版本(目前处于预览阶段)查询 Cortex Search 服务。有关 Snowflake Python APIs 的更多信息,请参阅 Snowflake Python APIs:使用 Python 管理 Snowflake 对象。
安装 Snowflake Python APIs 库¶
首先,从 PyPI 安装最新版本的 Snowflake Python APIs 包。有关从 PyPI 安装该包的说明,请参阅 安装 Snowflake Python APIs 库。
pip install snowflake -U
连接到 Snowflake¶
使用 Snowpark Session
或 Python Connector Connection
连接到 Snowflake,并创建 Root
对象。有关连接到 Snowflake 的更多说明,请参阅 使用 Snowflake Python APIs 连接到 Snowflake。下面的示例使用 Snowpark Session
对象和 Python 字典进行配置。
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)
查询服务¶
使用以下语法查询服务:
# 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())
备注
查询 Cortex Search 服务需要 Snowflake Python APIs 库的 0.8.0 或更高版本。
Rest API¶
Cortex Search 在 Snowflake REST APIs 套件中提供了一个 REST API 端点,目前处于预览阶段。为 Cortex Search 服务生成的 REST 端点结构如下:
https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query
其中:
<account_url>
:您的 Snowflake 账户 URL。(有关查找账户 URL 的说明,请参阅 查找账户的组织和账户名称。)<db_name>
:服务所在的数据库。<schema_name>
:服务所在的架构。<service_name>
:服务的名称。:query
:调用服务的方法。在这种情况下,为query
方法。
有关更多详细信息,请参阅有关 Cortex Search 服务 的 REST API 参考。下面介绍查询服务时使用的参数和筛选器语法。
参数¶
参数 |
描述 |
---|---|
|
您的搜索查询,用于搜索服务中的文本列。 |
|
列的以逗号分隔列表,用于返回响应中每个相关结果的列。这些列必须包含在服务的源查询中。 |
|
筛选对象,用于根据 |
|
要在响应中返回的最大结果数。
最大接受值为 1000。
默认值为 10。
|
筛选器语法¶
Cortex Search 支持对 CREATE CORTEX SEARCH SERVICE 命令中指定的 ATTRIBUTES 列进行筛选。
Cortex Search 支持两种匹配运算符:
字符串相等:
@eq
数组包含:
@contains
这些匹配运算符可以由各种逻辑运算符组成:
@and
@or
@not
这些运算符可以组合成一个筛选器对象。示例如下:
筛选字符串类列
string_col
等于值value
的行。{ "@eq": { "string_col": "value" } }
筛选 ARRAY 列
array_col
包含值value
的行。{ "@contains": { "array_col": "arr_value" } }
用逻辑运算符组成筛选器:
// 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" } } ] }
配置 REST API 身份验证¶
目前,Snowflake REST APIs 支持通过密钥对身份验证和 OAuth 进行身份验证。有关详细信息,请参阅 使用 Snowflake 对 Snowflake REST APIs 进行身份验证。
查询服务示例¶
要使用 curl (https://curl.se/) 和密钥对身份验证查询服务,请执行以下操作:
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>
}'
备注
使用 JWT 身份验证查询 REST API 时,会使用用户的默认角色。因此,查询服务的用户的默认角色必须对服务所在的数据库和架构以及服务本身具有 USAGE 权限。查询用户角色不一定需要对源查询中的数据拥有权限。有关用户角色的更多详细信息,请参阅 用户角色。
使用 SQL 系统函数预览服务¶
SNOWFLAKE.CORTEX.SEARCH_PREVIEW 函数允许在 SQL 环境(如工作表或 Snowflake 笔记本单元格)中预览对 Cortex Search 服务的个别查询的结果。通过该函数,可以轻松快速地验证服务是否已正确填充并提供合理的结果。
示例¶
下面的示例使用 preview query
查询字符串预览服务,并将结果解析为 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;
访问控制要求¶
查询 Cortex Search 服务的角色必须拥有以下权限才能检索结果:
权限
对象
USAGE
Cortex Search 服务
USAGE
Cortex Search 服务所在的数据库
USAGE
Cortex Search 服务所在的架构