- カテゴリ:
文字列とバイナリ関数 (AI 関数)
SEARCH_PREVIEW (SNOWFLAKE.CORTEX)¶
Cortex Searchのサービス名とクエリが指定されると、指定されたサービスからの応答を返します。
構文¶
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'<service_name>',
'<query_parameters_object>'
)
引数¶
service_nameCortex Searchサービスの名前。サービスが現在のセッションと異なるスキーマにある場合、完全修飾名を使用します。
query_parameters_objectサービスを呼び出すためのクエリパラメーターを指定する JSON オブジェクトを含む STRING。
キー
型
説明
デフォルト
queryString
検索クエリ、サービス内のテキスト列を検索します。
これは必須です。
columns配列
カンマ区切りのリストで、応答内の関連する結果ごとに返す列を指定します。これらの列は、サービスのソースクエリに含まれている必要があります。
サービス作成時に指定した検索列。
filterオブジェクト
ATTRIBUTES列のデータに基づいて結果をフィルタリングするためのフィルターオブジェクト。詳細な構文については、 フィルター構文 をご参照ください。空のオブジェクト
limitInteger
応答で返す結果の最大数。
10
フィルター構文¶
Cortex Searchは、 CREATE CORTEX SEARCH SERVICE コマンドで指定された ATTRIBUTES 列でのフィルタリングをサポートします。
Cortex Searchは4つのマッチング演算子をサポートしています。
ARRAY には
@containsが含まれています。NUMERIC または DATE/TIMESTAMP 同等またはそれ以上:
@gteNUMERIC または DATE/TIMESTAMP 同等またはそれ以下:
@lte主キー 等価:
@primarykey
これらのマッチング演算子は、さまざまな論理演算子と組み合わせることができます。
@and@or@not
以下の使用上の注意があります。
ソース・クエリ内の
NaN('not a number') 値に対するマッチングは、 特別な価値 の説明に従って処理されます。Fixed-point numeric values with more than 19 digits (not including leading zeroes) do not work with
@eq,@gte, or@lteand will not be returned by these operators.たとえば、ソースクエリに大きな値がある場合、
@eqを使用してその値を正確に一致させると、結果は返されません。これらの大きな値は、
@notを使用した全体的なフィルターによって依然として返される可能性があります(たとえば、@eq Xは、大きなXに対して値を返しませんが、@not @eq Yはそれを返します)
TIMESTAMPおよびDATEフィルターは、YYYY-MM-DDおよびタイムゾーンを意識した日付の場合はYYYY-MM-DD+HH:MMという形式の値を受け付けます。タイムゾーンオフセットを指定しない場合、日付は UTC で解釈されます。@primarykeyは 主キー で構成されたサービスでのみサポートされます。フィルターの値は である必要があります JSON すべての主キー列を対応する値にマッピングオブジェクト(またはNULL)。
これらの演算子は1つのフィルターオブジェクトにまとめることができます。
例¶
文字列のような列
string_colが値valueと等しい行に対するフィルタリング。{ "@eq": { "string_col": "value" } }
指定された主キーを持つ行へのフィルタリング
{ "@primarykey": { "region": "us-west-1", "agent_id": "abc123" } }
ARRAY 列
array_colに値valueが含まれる行のフィルタリング。{ "@contains": { "array_col": "arr_value" } }
NUMERIC 列
numeric_colが 10.5 から 12.5 (含む) の間の行のフィルター:{ "@and": [ { "@gte": { "numeric_col": 10.5 } }, { "@lte": { "numeric_col": 12.5 } } ]}
TIMESTAMP 列
timestamp_colが2024-11-19と2024-12-19の間にある行のフィルタリング。{ "@and": [ { "@gte": { "timestamp_col": "2024-11-19" } }, { "@lte": { "timestamp_col": "2024-12-19" } } ]}
論理演算子でフィルターを構成する
// 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" } } ] }
戻り値¶
Cortex Searchサービスからのクエリ結果と、一意のリクエスト ID を含む OBJECT を返します。`例`_ の出力例をご参照ください。
使用上の注意¶
This function is designed for testing and validation, and incurs more latency than using the REST or Python APIs. Use other methods to serve search queries in an end-user application that requires low latency.
This function only operates on constant arguments. It does not accept table columns as input.
この関数は、検索結果が300kBを超える場合、検索結果を切り捨てます。REST サーフェスは最大 10MB の応答を許可します。
例¶
この例は、 test query を使用して sample_service という名前のサービスをクエリします。この例は、(最大でも)5つの結果を返し、 col1 と col2 列のデータを含んでいます。
SELECT
SNOWFLAKE.CORTEX.SEARCH_PREVIEW (
'mydb.mysch.sample_service',
'{
"query": "test query",
"columns": ["col1", "col2"],
"limit": 3
}'
);
{
"results":[
{"col1":"text", "col2":"text"},
{"col1":"text", "col2":"text"},
{"col1":"text", "col2":"text"}
],
"request_id":"a27d1d85-e02c-4730-b320-74bf94f72d0d"
}