Snowflake

Snowflake Cortex Search徹底理解|ハイブリッド検索とRAG活用

2026-03-21
更新: 2026-03-27
NicheeLab編集部

Snowflake Cortex Searchは、キーワード検索とセマンティック検索を融合したハイブリッド検索をマネージドサービスとして提供します。 エンベディング生成・インデックス構築・スコア融合がすべて自動化されており、ユーザーはCREATE CORTEX SEARCH SERVICEでサービスを定義するだけで、 高品質な検索機能をアプリケーションに組み込めます。 RAG(Retrieval-Augmented Generation)のリトリーバとして利用することで、Cortex LLM関数と組み合わせた社内ドキュメントQAシステムを構築できます。

Cortex Searchが採用するハイブリッド検索は、2つの検索手法を内部的に組み合わせています。

検索方式手法強み弱み
キーワード検索(スパース)BM25ベースの転置インデックス完全一致・固有名詞に強い同義語・言い換えに弱い
セマンティック検索(デンス)ベクトル埋め込み+近似近傍探索意味的類似に強い固有名詞・型番の正確性に弱い
ハイブリッド(Cortex Search)両方のスコアを融合正確性と意味理解の両立インデックス構築コスト
検索フロー:

[ユーザークエリ: "Snowflakeのデータ保護機能"]
       │
       ├──→ キーワード検索 ──→ BM25スコア
       │     └─ "Snowflake", "データ", "保護" で転置インデックスを走査
       │
       ├──→ セマンティック検索 ──→ ベクトル類似度スコア
       │     └─ クエリをエンベディング化 → 近似近傍探索
       │
       └──→ スコア融合(Reciprocal Rank Fusion)
              └─ 最終ランキング結果を返却

CREATE CORTEX SEARCH SERVICE

Cortex Searchサービスの作成はDDLで行います。ソーステーブル・検索対象カラム・フィルタカラム・更新頻度を指定します。

CREATE OR REPLACE CORTEX SEARCH SERVICE knowledge_base_search
  ON doc_content                    -- 検索対象のテキストカラム
  ATTRIBUTES doc_title, category    -- フィルタ用カラム(任意)
  WAREHOUSE = search_wh             -- インデックス構築用WH
  TARGET_LAG = '1 hour'             -- ソースデータの反映遅延
AS (
  SELECT
    doc_id,
    doc_title,
    doc_content,
    category,
    updated_at
  FROM knowledge_base
  WHERE is_published = TRUE
);

主要パラメータ

パラメータ説明必須
ON全文検索・セマンティック検索の対象テキストカラムはい
ATTRIBUTESメタデータフィルタリング用カラム(WHERE条件で利用)いいえ
WAREHOUSEインデックス構築に使用するウェアハウスはい
TARGET_LAGソーステーブルの変更がインデックスに反映されるまでの最大遅延はい

検索クエリの実行

作成したCortex Searchサービスへのクエリは、Python SDK(推奨)またはREST APIで実行します。

# Python SDKでの検索
from snowflake.core import Root

root = Root(session)

search_service = (
    root.databases["MY_DB"]
    .schemas["PUBLIC"]
    .cortex_search_services["KNOWLEDGE_BASE_SEARCH"]
)

results = search_service.search(
    query="Snowflakeのタイムトラベル機能について",
    columns=["doc_id", "doc_title", "doc_content", "category"],
    filter={
        "@eq": {"category": "data_protection"}
    },
    limit=5
)

for result in results.results:
    print(f"Title: {result['doc_title']}")
    print(f"Score: {result['search_score']}")
    print(f"Content: {result['doc_content'][:200]}...")
    print("---")

フィルタ構文

ATTRIBUTESで指定したカラムに対して、以下のフィルタ演算子が使えます。

# 完全一致
{"@eq": {"category": "security"}}

# OR条件(複数値)
{"@or": [
  {"@eq": {"category": "security"}},
  {"@eq": {"category": "governance"}}
]}

# AND条件
{"@and": [
  {"@eq": {"category": "security"}},
  {"@eq": {"doc_type": "guide"}}
]}

RAGリトリーバとしての活用

Cortex SearchをリトリーバとしてCortex LLM関数と組み合わせることで、 社内ナレッジに基づいたRAGパイプラインを構築できます。

RAGパイプライン構成:

[ユーザー質問]
       │
       ▼
[Cortex Search]  ← リトリーバ
       │ 関連ドキュメント Top-K を取得
       ▼
[プロンプト構築]
       │ "以下のコンテキストに基づいて回答してください:
       │  {検索結果のdoc_content}"
       ▼
[SNOWFLAKE.CORTEX.COMPLETE()]  ← ジェネレータ
       │ コンテキスト付きで回答を生成
       ▼
[回答をユーザーに返却]
# RAGパイプラインの実装例(Streamlit in Snowflake)
import streamlit as st
from snowflake.core import Root
from snowflake.snowpark.context import get_active_session

session = get_active_session()
root = Root(session)

search_service = (
    root.databases["KB_DB"]
    .schemas["PUBLIC"]
    .cortex_search_services["KB_SEARCH"]
)

user_question = st.text_input("質問を入力してください")

if user_question:
    # Step 1: Cortex Searchで関連ドキュメント取得
    results = search_service.search(
        query=user_question,
        columns=["doc_content"],
        limit=3
    )

    context = "\n\n".join([r["doc_content"] for r in results.results])

    # Step 2: COMPLETE関数で回答生成
    prompt = f"""以下のコンテキストのみに基づいて質問に回答してください。
コンテキストに情報がない場合は「情報が見つかりませんでした」と回答してください。

コンテキスト:
{context}

質問: {user_question}"""

    answer = session.sql(
        "SELECT SNOWFLAKE.CORTEX.COMPLETE('llama3.1-70b', ?)",
        params=[prompt]
    ).collect()[0][0]

    st.write(answer)

コストモデル

  • インデックス構築: 指定したウェアハウスのクレジットを消費
  • インデックスの差分更新: TARGET_LAGに応じてサーバーレスクレジットを消費
  • 検索クエリ実行: サーバーレスクレジットを消費(ウェアハウス不要)
  • ストレージ: インデックスデータのストレージ費用が発生

Cortex Searchと他手法の比較

手法検索方式エンベディング管理適したユースケース
Cortex Searchハイブリッド(自動)自動RAGリトリーバ・ドキュメント検索
VECTOR型 + 距離関数セマンティックのみ手動管理カスタムエンベディング・画像検索
SEARCH OPTIMIZATIONキーワードのみ(点検索最適化)不要等値検索・LIKE検索の高速化

試験対策のポイント

  • Cortex Searchはキーワード+セマンティックのハイブリッド検索サービス
  • CREATE CORTEX SEARCH SERVICEでON(検索対象)、TARGET_LAG(更新頻度)を指定
  • 検索クエリ実行にウェアハウスは不要(サーバーレスコンピュート)
  • ATTRIBUTESで指定したカラムはメタデータフィルタに使用
  • RAGパイプラインではリトリーバとして活用し、COMPLETE関数と組み合わせる
  • VECTOR型を使った手動のベクトル検索との違いを理解する

サンプル問題

Cortex Search

問題 1

Cortex Searchサービスを作成するSQL文で、ソーステーブルの変更が検索インデックスに反映されるまでの最大遅延を制御するパラメータはどれか?

  1. A. REFRESH_INTERVAL
  2. B. TARGET_LAG
  3. C. INDEX_SYNC_PERIOD
  4. D. UPDATE_FREQUENCY

正解: B

CREATE CORTEX SEARCH SERVICEのTARGET_LAGパラメータは、ソーステーブルの変更がインデックスに反映されるまでの最大遅延を指定します。例えば '1 hour' を指定すると、最大1時間以内に変更が反映されます。A/C/DはCortex Searchの実在するパラメータではありません。

よくある質問

Cortex Searchのハイブリッド検索とは何ですか?

ハイブリッド検索は、従来のキーワードマッチング(BM25等のスパース検索)とベクトルベースのセマンティック検索(密ベクトル検索)を組み合わせた手法です。Cortex Searchでは両方のスコアを内部的に融合し、キーワードの正確性と意味的な関連性の両方を考慮した検索結果を返します。ユーザーがスコア融合の重み付けを意識する必要はありません。

Cortex SearchとVector Searchの違いは何ですか?

Cortex Searchはテキストデータのハイブリッド検索に特化したマネージドサービスで、インデックス構築・エンベディング生成・スコア融合がすべて自動化されています。一方、Snowflakeの VECTOR データ型やVECTOR_L2_DISTANCE等のベクトル関数は、ユーザー自身がエンベディングを生成・格納し、類似度計算を自分で記述する低レベルAPIです。RAGのリトリーバとしてはCortex Searchの方が構築が容易です。

Cortex Searchのデータ更新はどのタイミングで反映されますか?

CREATE CORTEX SEARCH SERVICEでTARGET_LAGパラメータを設定します。例えば '1 hour' を指定すると、ソーステーブルの変更が最大1時間以内に検索インデックスに反映されます。TARGET_LAGを短くするほどリアルタイム性は上がりますが、サーバーレスクレジットの消費量も増加します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.