はじめに:そもそも「ベクトル検索」って何?
「LIKE検索だと、表記ゆれや言い換えに弱くて困る…」そんな悩みを抱えたことはありませんか?例えば、ユーザーが「返金したい」と検索したのに、ドキュメントには「払い戻し手続き」と書かれていて、まったくヒットしない、というケースです。
そんな課題を解決するのが ベクトル検索 (セマンティック検索) です。文章をAIで数値ベクトル (埋め込み) に変換し、「意味的に近いかどうか」で検索する仕組みです。そして、その仕組みを Snowflake 上で簡単に作れるマネージドサービスが、今回紹介する Snowflake Cortex Search です。

Snowflake Cortex Search の特徴
Cortex Search は、Snowflake Cortex ファミリーの一員で、Snowflake のテーブル上にあるテキストデータをそのまま検索対象にできるサービスです。主な特徴は次の通りです。
- ハイブリッド検索:キーワード検索 (BM25 のような語彙一致) と、ベクトル検索 (意味一致) を組み合わせ、両方の良いとこ取りができます。
- 埋め込み生成が自動:面倒な embedding 処理を Snowflake 側で内部処理してくれるので、開発者が別途モデルを呼ぶ必要がありません。
- 自動更新:元テーブルの変更を検知して、検索インデックスをマネージドで更新してくれます。
- RAGに最適:LLMに渡す「関連ドキュメント抽出」用途として、そのまま使えます。
仕組みをざっくり理解しよう
Cortex Search の裏側では、こんな流れでデータが処理されています。
- テーブルのテキスト列を取り出す
- Snowflakeが内部で 埋め込みベクトル に変換
- ベクトルとテキストの両方をインデックス化
- クエリ時にハイブリッド検索 + 再ランキングを実施
- 関連度の高い上位N件を返す
従来であれば、PythonでOpenAIのAPIを叩いて埋め込みを作り、それをベクトルDBに格納して…という作業が必要でしたが、Cortex Search なら SQLひとつでサービスが立ち上がる のが最大の魅力です。

実際に作ってみよう
1. 検索対象のテーブルを準備
まずはFAQやドキュメントなどのテキストデータをテーブルにロードしておきます。
CREATE OR REPLACE TABLE faq_docs (
doc_id STRING,
title STRING,
content STRING,
category STRING,
updated_at TIMESTAMP_NTZ
);
2. Cortex Search Service を作成
次に CREATE CORTEX SEARCH SERVICE 文でサービスを作ります。検索対象列 (ON)、返却したい属性 (ATTRIBUTES)、ウェアハウスなどを指定します。
CREATE OR REPLACE CORTEX SEARCH SERVICE faq_search
ON content
ATTRIBUTES category, title
WAREHOUSE = my_wh
TARGET_LAG = '1 hour'
AS (
SELECT doc_id, title, content, category, updated_at
FROM faq_docs
);
TARGET_LAG を指定することで、「元テーブルの更新から最大1時間以内にインデックスを追随させる」という挙動になります。
3. SQLから検索する
作成したサービスは SEARCH_PREVIEW 関数で呼び出せます。
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'MY_DB.MY_SCHEMA.FAQ_SEARCH',
'{
"query": "返金したいのですが手続きを教えてください",
"columns": ["doc_id", "title", "content"],
"filter": {"@eq": {"category": "支払い"}},
"limit": 5
}'
)
):results;
これだけで、意味的に近いFAQが上位から返ってきます。Pythonからは snowflake.core SDK を使って同じことができるので、アプリ組み込みもスムーズです。
こんなユースケースで使えます
- 社内ドキュメントの横断検索:Confluence・Notion・SlackなどをロードしてQAボット化
- RAGチャットボット:Cortex Search で関連文書を引いて、Cortex COMPLETE関数 に渡してLLMで回答生成
- 類似商品レコメンド:商品説明文を埋め込みにして似た商品を提示
- 顧客サポートの自動応答:過去問い合わせから類似事例を高速検索
特にRAG用途では、EXTRACT_ANSWER や COMPLETE と組み合わせることで、SQLだけで「検索 → 回答抽出」のパイプラインが完成します。
使う際の注意点
- 料金:インデックスの構築・更新にはサービングコスト + ウェアハウスコストがかかります。
TARGET_LAGを必要以上に短くしないのがコツです。 - テキスト長:長文は事前にチャンク分割しておくと精度が上がります。
- 権限:サービス作成・利用には
CREATE CORTEX SEARCH SERVICEとUSAGE権限が必要です。
まとめ
Snowflake Cortex Search を使えば、面倒なベクトルDB運用なしに、Snowflake内で完結する高精度な検索サービスを構築できます。SQLひとつで埋め込みもインデックスも自動管理してくれるので、生成AIアプリの第一歩としても非常におすすめです。まずは小さなFAQテーブルで試してみて、検索体験の違いを体感してみてください!
参考リンク
関連記事
- Snowflake Cortexとは?生成AI機能の全体像と料金をやさしく解説 – Cortexファミリーの全体像と料金体系を確認できます
- Snowflake Cortex COMPLETE関数入門|SQLでClaude・Llama・Mistralを呼ぼう – Cortex Searchと組み合わせてRAGを作るのに必須の関数
- Snowflake Cortex EXTRACT_ANSWERで文書から自動で答えを抽出しよう – 検索結果から回答を抽出したい時に便利
- Snowflake Cortex LLM関数まとめ – Cortexの各関数を一通りおさらいできます


