第3章 アプリケーション開発 / 想定学習時間:30〜40分 / 最終確認:2026年8月

3-3. Databricks AI Search(旧 Vector Search)による検索パイプライン構築

🎯 この節の学習目標

1. AI Search の構成要素:エンドポイントとインデックス

Databricks AI Search(旧 Vector Search)は、Databricks が提供するマネージドなベクトル検索サービスです。かつては「Vector Search」という名称でしたが、現在は「AI Search」に改名されており、エンドポイント+インデックスという構成や主要機能はそのまま引き継がれています(本書では以降「AI Search」と表記します)。3-2 で埋め込んだチャンクを格納し、クエリベクトルとの類似検索を高速に実行します。構成要素は2つに分かれており、この区別が試験でも問われます。

📘 試験対策(出題時はこの名称もありうる)

試験問題では旧称の Vector Search のまま出題される可能性があります。Delta Sync IndexDirect Vector Access Index という用語や、旧SDK databricks-vectorsearch(VectorSearchClient)を前提とした選択肢が出てきても、本節の内容がそのまま対応します。

🚀 現行Databricks(2026年8月)

製品名は Databricks AI Search に改名され、Python SDK も databricks-ai-search(import は databricks.ai_search 配下)が正式になりました。旧パッケージは非推奨のシム(旧名のまま新実装を呼び出す互換層)として残り、DeprecationWarning を出しつつ動作します。インデックスの種類・同期モード・検索APIなどの概念は従来どおりです。

構成要素正体役割
AI Search エンドポイント検索を実行する計算資源インデックスをホストし、検索リクエストを処理する。1つのエンドポイントで複数のインデックスをホストできる
AI Search インデックスUnity Catalog 配下のオブジェクト(カタログ.スキーマ.インデックス名)ベクトルとメタデータの格納体。UC のアクセス制御・ガバナンスの対象になる

インデックスが Unity Catalog 配下にあることで、テーブルと同じように権限管理・監査ができます(ガバナンスは第6章で詳述)。

2. インデックスの2タイプ:Delta Sync と Direct Vector Access

インデックスへのデータの入れ方には2方式あります。

2-1. Delta Sync Index:Delta テーブルから自動同期

ソースとなる Delta テーブルを指定すると、その内容がインデックスへ自動的に同期される方式です。ソーステーブルには Change Data Feed(CDF)の有効化が必要で、テーブルへの追加・更新・削除が差分としてインデックスに反映されます。さらに、埋め込みの計算を誰が行うかで2通りに分かれます。

埋め込みの管理仕組み指定するもの
マネージド埋め込みDatabricks がテキスト列から埋め込みを自動計算。クエリ時の埋め込みも同じモデルで自動計算されるテキスト列名と embedding_model_endpoint_name(例:databricks-gte-large-en)
自己管理埋め込み自分で計算した埋め込みベクトル列を Delta テーブルに持たせ、それを同期する埋め込みベクトル列名と次元数

マネージド埋め込みは、3-2 で学んだ「インデックスとクエリで同じモデルを使う」原則を仕組みとして保証してくれる点が大きな利点です。

2-2. Direct Vector Access Index:API で直接書き込む

ソーステーブルを持たず、API 経由でベクトルとメタデータを直接 upsert / delete する方式です。自動同期はなく、データの更新管理はすべてアプリケーション側の責任になります。既存のパイプラインで埋め込みを管理していて、書き込みタイミングを完全に制御したい場合に使います。

📝 試験のポイント

試験で問われやすい典型パターン:「ソースの Delta テーブルが更新されたら、検索インデックスにも自動で反映されるようにしたい」→ 正解は「Change Data Feed を有効化した Delta テーブルを Delta Sync Index のソースにする」です。Direct Vector Access Index は自動同期しないため、この要件では誤答になります。逆に「同期を自前で完全制御したい」なら Direct Vector Access が正解側に回ります。

2-3. 同期モード:Triggered / Continuous

Delta Sync Index の同期タイミングは2モードから選びます。

3. インデックス作成のコード例

💡 具体例:マネージド埋め込みの Delta Sync Index を作成する

# 新SDK:databricks-ai-search パッケージ(import は databricks.ai_search 配下)
from databricks.ai_search.client import AISearchClient
# 旧: from databricks.vector_search.client import VectorSearchClient
#    (旧パッケージ databricks-vectorsearch は非推奨のシムとして残り、
#     DeprecationWarning を出しつつ同じ機能を提供する)

client = AISearchClient()

index = client.create_delta_sync_index(
    endpoint_name="my_vs_endpoint",
    index_name="main.rag.docs_index",           # UC配下の3階層名
    source_table_name="main.rag.docs_chunks",   # CDF有効のDeltaテーブル
    pipeline_type="TRIGGERED",                  # または CONTINUOUS
    primary_key="chunk_id",
    embedding_source_column="chunk_text",       # テキスト列
    embedding_model_endpoint_name="databricks-gte-large-en",
)

ソーステーブル側では、あらかじめ ALTER TABLE ... SET TBLPROPERTIES (delta.enableChangeDataFeed = true) のように Change Data Feed を有効化しておく必要があります。自己管理埋め込みの場合は、embedding_source_column とモデル指定の代わりに、埋め込みベクトル列名と次元数を指定します。

4. 検索の実行:similarity_search

作成したインデックスに対しては、similarity_search で検索します。

results = index.similarity_search(
    query_text="返品の手続きを教えて",       # マネージド埋め込みならテキストでOK
    columns=["chunk_id", "chunk_text", "source"],  # 返してほしい列
    num_results=5,                                 # 上位k件
    filters={"category": "customer_support"},      # メタデータで絞り込み
)

また、ベクトル類似検索にキーワード一致の要素を組み合わせるハイブリッド検索もサポートされています。製品型番や固有名詞のように「字面の一致が重要」なクエリでは、純粋なベクトル検索よりもハイブリッド検索が有効な場面があります。

ここまでの部品を組み合わせると、RAG の検索パイプラインは次の流れになります。

ユーザーのクエリ「返品の手続きを教えて」
埋め込みモデル(マネージド埋め込みなら自動計算)
クエリのベクトル化
AI Search インデックス検索filters による絞り込み/ハイブリッド検索
上位k件のチャンク
(任意)リランキング関連度の高い順に並べ直す
プロンプトへ組み込み3-4 プロンプトオーグメンテーション
LLM が回答を生成

図:AI Search を使った RAG 検索パイプラインの全体像

5. LangChain から使う:retriever としての接続

3-1 の RAG チェーンに AI Search を組み込むには、databricks-langchainDatabricksVectorSearch を使います。

from databricks_langchain import DatabricksVectorSearch

vector_store = DatabricksVectorSearch(
    index_name="main.rag.docs_index",
    columns=["chunk_text", "source"],
)
retriever = vector_store.as_retriever(search_kwargs={"k": 5})

# 3-1 で学んだ RAG チェーンの骨格にそのまま差し込める
# rag_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | parser

as_retriever() で LangChain 標準の retriever インターフェースになるため、チェーンの他の部分を変えずに検索段だけを AI Search に差し替えられます。検索結果をどうプロンプトに組み込むかは、次の 3-4 のテーマです。

✅ この節のまとめ

練習問題

問1. ナレッジベースの Delta テーブルは毎日更新される。テーブルの変更を AI Search インデックスへ自動的に反映させたい。最も適切な構成はどれか。

  1. Direct Vector Access Index を作成し、更新のたびに手動でベクトルを upsert する
  2. ソーステーブルで Change Data Feed を有効化し、Delta Sync Index を作成する
  3. 毎日インデックスを削除して作り直すジョブをスケジュールする
  4. Delta テーブルを直接検索するので、インデックスは不要である
解答と解説を見る

正解:B

「ソース Delta テーブルの変更を自動反映」という要件は Delta Sync Index の典型ユースケースで、前提として CDF の有効化が必要です。Aは自動同期がなく手動運用になるため要件を満たしません。Cは全再構築のコストが無駄に大きく、Dは Delta テーブル単体では類似(ベクトル)検索を提供できません。

問2. マネージド埋め込み(managed embeddings)の Delta Sync Index の説明として正しいものはどれか。

  1. 埋め込みベクトルを自分で計算して Delta テーブルの列に格納し、その列を同期する
  2. テキスト列と埋め込みモデルのエンドポイント名を指定すると、Databricks がチャンクとクエリの両方の埋め込みを自動計算する
  3. 埋め込みモデルを使わず、キーワード検索のみを行う
  4. API 経由でベクトルを直接 upsert する必要がある
解答と解説を見る

正解:B

マネージド埋め込みでは embedding_source_column(テキスト列)と embedding_model_endpoint_name を指定し、埋め込み計算は Databricks 側が行います。クエリ時も同じモデルが自動で使われるため、モデル不一致の事故を防げます。Aは自己管理埋め込みの説明、Dは Direct Vector Access Index の説明です。

問3. AI Search の「エンドポイント」と「インデックス」の関係として正しいものはどれか。

  1. エンドポイントは検索を処理する計算資源であり、インデックスは Unity Catalog 配下のオブジェクトとしてエンドポイント上にホストされる
  2. エンドポイントとインデックスは同じものを指す2つの呼び名である
  3. インデックスが計算資源で、エンドポイントはデータの格納体である
  4. 1つのエンドポイントには1つのインデックスしか作成できない
解答と解説を見る

正解:A

エンドポイント=計算資源、インデックス=UC配下のデータオブジェクト、という役割分担です。Cは両者の役割が逆です。1つのエンドポイントは複数のインデックスをホストできるため、Dも誤りです。インデックスが UC 配下にあることで、権限管理やガバナンスをテーブルと同様に適用できます。

問4. 社内文書の検索で「経理部の文書だけを対象に、質問に意味的に近いチャンクを上位5件取得したい」。similarity_search の使い方として最も適切なのはどれか。

  1. num_results=5 を指定し、部署の絞り込みは検索後にLLMに任せる
  2. query_text に「経理部」と入力して検索する
  3. query_text に質問文、num_results=5filters に部署=経理部のメタデータ条件を指定する
  4. 経理部専用の埋め込みモデルを新規に学習する
解答と解説を見る

正解:C

「特定属性での絞り込み」はメタデータの filters、「意味的に近い上位k件」は query_text + num_results の役割です。Aは無関係な部署のチャンクが上位5件を占めるおそれがあり、絞り込みを後段に回すのは非効率かつ不確実です。Bは部署名との類似検索になってしまい、質問内容との類似性が失われます。Dは過剰で、メタデータ設計(2-6)で解決できる問題です。

問5. Databricks のベクトル検索サービスの名称に関する説明として正しいものはどれか。

  1. Vector Search と AI Search は別々の製品で、機能の異なる2つのサービスとして併存している
  2. Databricks AI Search は旧称 Vector Search の改名後の名称で、Delta Sync Index や Direct Vector Access Index などの主要概念はそのまま引き継がれている
  3. AI Search への改名に伴い、Delta Sync Index は廃止され Direct Vector Access Index のみになった
  4. 旧SDKパッケージ databricks-vectorsearch は即時削除され、旧コードは一切動作しなくなった
解答と解説を見る

正解:B

AI Search は Vector Search の改名後の名称であり、別製品ではありません(Aは誤り)。インデックスの2タイプや同期モードなどの概念・機能は改名後も同じです(Cは誤り)。旧パッケージは非推奨のシムとして残り、DeprecationWarning を出しつつ動作するため、即時削除というDも誤りです。試験では旧称のまま出題される可能性があるため、「AI Search(旧 Vector Search)」という対応関係を押さえておきましょう。