ベクトル検索
この記事では、ログイン検索とは何か、どのように機能するかなど、概要を説明します。
ベクトル検索とは何ですか?
ダイヤル検索は、 Databricksデータ インテリジェンス プラットフォームに組み込まれ、そのガバナンスおよび生産性ツールと統合されたダイヤル検索ソリューションです。 ベクトル検索は、埋め込みベクトルを取得するために最適化された検索手法の一種です。埋め込みとは、データ(通常はテキストデータまたは画像データ)の意味内容を数学的に表現したものである。埋め込みは大規模言語モデルによって生成され、互いに類似したドキュメントや画像の検索に依存する多くの生成AIアプリケーションの重要なコンポーネントです。 例としては、RAGシステム、レコメンデーションシステム、画像認識および動画認識などが挙げられる。
地下鉄検索を使用すると、 Deltaテーブルから地下鉄検索インデックスを作成します。 このインデックスには、メタデータを含む埋め込みデータが含まれています。その後、REST APIを使用してインデックスを照会し、最も類似したベクトルを特定して、関連するドキュメントを返すことができます。基となるDeltaテーブルが更新されたときに自動的に同期するようにインデックスを構成できます。
人気検索は以下をサポートしています。
- ハイブリッドキーワード類似性検索。
- あらゆるエンドポイントでの全文キーワード検索(ベータ版) 、またはストレージ最適化エンドポイントでの専用全文インデックス(ベータ版)が利用可能です。
- フィルタリング。
- 再ランキング。
- ベクトル検索エンドポイントを管理するためのアクセス制御リスト (ACL) 。
- 選択した列のみを同期します。
- 生成された埋め込みを保存して同期します。
ベクトル検索はどのように機能するのですか?
トレンド検索は、近似最近傍 ( ANN ) 検索に Hierarchical Navigable Small World (HNSW) アルゴリズムを使用し、埋め込みベクトルの類似性を測定するために L2 距離メトリクスを使用します。 コサイン類似度を使用する場合は、ベクトル検索にデータポイントの埋め込みを入力する前に、正規化する必要があります。データポイントを正規化すると、L2距離によって生成されるランキングは、コサイン類似度によって生成されるランキングと同じになります。
項目検索は、ベクトルベースの埋め込み検索と従来のキーワードベースの検索技術を組み合わせたハイブリッドキーワード類似性検索もサポートしています。 この手法では、クエリ内の単語を完全に一致させると同時に、ベクトルベースの類似性検索を用いてクエリの意味的な関係性や文脈も捉えます。
これら2つの技術を統合することで、ハイブリッドキーワード類似検索は、正確なキーワードだけでなく、概念的に類似したキーワードを含むドキュメントも検索し、より包括的で関連性の高い検索結果を提供します。このメソッドは、ソースデータにSKUや識別子のような一意のキーワードがあり、純粋な類似検索に適していないRAGアプリケーションで特に有効です。
APIの詳細については、Python SDKリファレンスおよびベクトル検索インデックスのクエリを参照してください。
類似検索計算
類似性検索の計算では、次の式を使用します。
ここで、 distはクエリーqとインデックスエントリx間のユークリッド距離です。
キーワード検索アルゴリズム
関連性スコアはOkapi BM25を使用して計算されます。テキストまたは文字列形式のソース テキスト埋め込みおよびメタデータ列を含む、すべてのテキストまたは文字列列が検索されます。トークン化機能は、単語の境界で分割し、句読点を削除し、すべてのテキストを小文字に変換します。
類似検索とキーワード検索を組み合わせる方法
類似検索とキーワード検索の結果は、Reciprocal Rank Fusion(RRF)機能を使用して結合されます。
RRF はまず、次のスコアを使用して各メソッドからの各ドキュメントを再スコアリングします。
rrf_param 上位ランクのドキュメントと下位ランクのドキュメントの相対的な重要度を制御します。文献に基づいて、 rrf_paramは60に設定されています。
スコアは、次の正規化係数を使用して、可能な限り最高のスコアが 1 になるように正規化されます。
各ドキュメントの最終スコアは次のように計算されます。
最終スコアが最も高いドキュメントが返されます。
ベクトル埋め込みを提供するためのオプション
Databricksで検索インデックスを作成するには、まずベクトル埋め込みを提供する方法を決定する必要があります。 Databricks は 3 つのオプションをサポートしています。
オプション 1: 埋め込みを使用したDelta同期インデックスDatabricksによるコンピュート
このオプションでは、テキスト形式のデータを含むソース Delta テーブルを指定します。Databricks は、指定したモデルを使用して埋め込みを計算し、オプションで埋め込みを Unity Catalog 内のテーブルに保存します。Delta テーブルが更新されても、インデックスは Delta テーブルと同期されたままになります。
次の図は、このプロセスを示しています。
- クエリーの埋め込みを計算します。クエリーにはメタデータフィルターを含めることができます。
- 最も関連性の高い文書を特定するために類似検索を実行します。
- 最も関連性の高いドキュメントを返し、クエリーに追加します。

オプション 2: 自己管理型埋め込みによる Delta Sync Index
このオプションでは、事前に計算された埋め込みを含むソース Delta テーブルを提供します。Delta テーブルが更新されても、インデックスは Delta テーブルと同期されたままになります。
自己管理型の埋め込みインデックスを Databricks 管理型のインデックスに変換することはできません。後から管理された埋め込みを使用することにした場合は、新しいインデックスを作成し、埋め込みを再計算する必要があります。
次の図は、このプロセスを示しています。
- クエリーはエンベディングで構成され、メタデータフィルターを含めることができます。
- 類似性検索を実行して、最も関連性の高いドキュメントを特定します。最も関連性の高いドキュメントを返し、クエリーに追加します。

オプション3: 直接ベクトルアクセスインデックス
このオプションを使用する場合、埋め込みテーブルが変更されたときに、REST API を使用してインデックスを手動で更新する必要があります。
次の図は、このプロセスを示しています。

オプション4:ストレージ最適化エンドポイントにおける全文検索インデックス(ベータ版)
このオプションを使用すると、埋め込み列を含まない、ストレージ最適化エンドポイント上にDelta同期インデックスを作成できます。 このインデックスは、ベクトル埋め込みを必要とせずに、BM25スコアリングを使用したキーワードベースの全文検索をサポートします。これは、テキストデータの中から正確な用語、識別子、またはキーワードを検索する際に役立ちます。
query_type="FULL_TEXT"使用すると、標準エンドポイントとストレージ最適化エンドポイントの両方で、既存のベクトル検索インデックスに対してキーワード検索を実行できます。このオプションは、埋め込みを一切含まない専用インデックスを作成するためのものです。
専用の全文検索インデックスは、ストレージ最適化エンドポイントでのみ利用可能であり、トリガー同期モードが必要です。手順については、 「全文検索インデックスの作成(ベータ版)」を参照してください。
エンドポイントオプション
トレンド検索には次のオプションが用意されているため、アプリケーションのニーズを満たすエンドポイント構成を選択できます。
ストレージ最適化エンドポイントはパブリックプレビュー版として提供されています。高QPS機能はパブリックプレビュー版であり、標準エンドポイントでのみ利用可能です。
-
標準 エンドポイントの容量は、次元 768 で 3 億 2000 万ベクトルです。
- 標準的なエンドポイントを使用すれば、高いQPS(1秒あたりのクエリ数)を利用して、高い持続的なスループットをサポートできます。エンドポイントのスループットを高QPSで拡張する方法を参照してください。
-
ストレージ最適化 エンドポイントは、より大きな容量(768次元で10億以上のベクトル)を持ち、インデックス作成速度が10~20倍高速です。ストレージ最適化エンドポイントへのクエリでは、レイテンシが約250ミリ秒わずかに増加します。このオプションの価格は、ベクトルの数が多い場合に最適化されています。 価格の詳細については、 「楽天検索 価格」ページをご覧ください。 地下鉄検索コストの管理については、 「地下鉄検索コスト管理ガイド」を参照してください。
エンドポイントを作成するときに、エンドポイント タイプを指定します。
ストレージ最適化エンドポイントの制限も参照してください。
共通検索の設定方法
通用検索を使用するには、次のものを作成する必要があります。
-
ベクトル検索エンドポイント。このエンドポイントは、トラフィック検索インデックスを提供します。 REST API または SDK を使用してエンドポイントをクエリおよび更新できます。手順については、「通用検索エンドポイントの作成」を参照してください。
エンドポイントは、インデックスのサイズまたは並列リクエストの数をサポートするために自動的にスケールアップします。 インデックスが削除されると、エンドポイントは自動的にスケールダウンします。
-
ベクトル検索インデックス。 ベクトル検索インデックスはDeltaテーブルから作成され、漸近近似最近傍 ( ANN ) 検索を提供するように最適化されています。 検索の目的は、クエリに類似したドキュメントを識別することです。ベクトル検索インデックスは Unity Catalog に表示され、 Unity Catalogによって管理されます。 手順については、ベクトル検索インデックスの作成を参照してください。
さらに、エンベディングをDatabricksに計算させることを選択した場合は、事前に構成された基盤モデル API エンドポイントを使用するか、モデルサービング エンドポイントを作成して、選択したエンベディングモデルを提供できます。 手順については、トークン単位の従量課金 基盤モデル API または 基盤モデルをサービングするエンドポイントの作成を参照してください。
モデルサービング エンドポイントをクエリするには、 REST API または Python SDKを使用します。 クエリでは、Delta テーブル内の任意の列に基づいてフィルターを定義できます。 詳細については、 クエリでフィルターを使用する、API リファレンス、または Python SDK リファレンスを参照してください。
要件
- Unity Catalog対応ワークスペースであること。
- サーバレス コンピュートが有効化されていること。手順については、 サーバレス コンピュートへの接続を参照してください。
- 標準エンドポイントの場合、ソース テーブルでチェンジデータフィードが有効になっている必要があります。DatabricksでのDelta Lake チェンジデータフィードの使用 を参照してください。
- ベクトル検索インデックスを作成するには、インデックスが作成されるカタログ スキーマに対する CREATE TABLE 権限が必要です。
ベクトル検索エンドポイントを作成および管理するためのアクセス許可は、アクセス制御リストを使用して構成されます。 ベクトル検索エンドポイント ACLを参照してください。
データ保護と認証
Databricksでは、データを保護するために次のセキュリティ制御機能を実装しています。
- サイバー検索へのすべての顧客リクエストは、論理的に分離され、認証され、許可されます。
- 人気検索は、保存時 (AES-256) および転送中 (TLS 1.2+) のすべてのデータを暗号化します。
スマートフォン検索は、サービスプリンシパルとパーソナル アクセス オンライン (PAT) の 2 つの認証モードをサポートしています。 本番運用アプリケーションの場合、 Databricksサービス プリンシパルを使用することをお勧めします。これは、個人のアクセス セキュリティと比較して、クエリごとのパフォーマンスが最大 100 ミリ秒速くなります。
-
サービスプリンシパル トークン. 管理者は、サービスプリンシパル トークンを生成し、それを SDK または APIに渡すことができます。 サービスプリンシパルを使用するを参照してください。本番運用のユースケースでは、 Databricks はサービスプリンシパル トークンを使用することをお勧めします。
Python# Pass in a service principal
vsc = VectorSearchClient(workspace_url="...",
service_principal_client_id="...",
service_principal_client_secret="..."
) -
個人アクセストークン。パーソナル アクセス VPN を使用して、クラウド検索で認証を行うことができます。 個人アクセス認証トークンを参照してください。ノートブック環境でSDK使用する場合、 SDK認証用の PAT を自動的に生成します。
Python# Pass in the PAT token
client = VectorSearchClient(workspace_url="...", personal_access_token="...")
顧客管理キー (CMK) は、2024 年 5 月 8 日以降に作成されたエンドポイントでサポートされています。
使用状況とコストを監視する
モニタリングの使用状況と、地下鉄検索インデックスとエンドポイントに関連するコストについては、 「地下鉄検索コスト管理ガイド」を参照してください。
予算ポリシー別に利用状況を照会することもできます。「節約検索」を参照してください。
リソースとデータサイズの制限
次の表は、ベクトル検索のエンドポイントとインデックスに対するリソースとデータサイズの上限を示しています。
リソース | 粒度 | 上限 |
|---|---|---|
ベクトル検索エンドポイント | ワークスペースごと | 500 |
埋め込み( Delta同期インデックス) | 標準エンドポイントごと | 埋め込み次元768で約3億2000万 埋め込み次元1536で約1億6000万 埋め込み次元3072で約80,000,000 (ほぼ直線的に拡大します) |
埋め込み(直接ベクトルアクセスインデックス) | 標準エンドポイントごと | 埋め込み次元768で約2,000,000 |
埋め込み(ストレージ最適化エンドポイント) | ストレージ最適化エンドポイントごと | 埋め込み次元768で約1,000,000,000 |
エンベディングの次元 | インデックスごと | 4096 |
インデックス | エンドポイントごと | 50 |
列 | インデックスごと | 50 |
列 | サポートされている型: バイト、short、integer、long、float、double、Boolean、文字列、timestamp、date、array | |
メタデータフィールド | インデックスごと | 50 |
インデックス名 | インデックスごと | 128文字 |
ベクトル検索のインデックスの作成と更新には、次の上限が適用されます。
リソース | 粒度 | 上限 |
|---|---|---|
Delta Syncインデックスの行サイズ | インデックスごと | 100KB |
Delta Syncインデックスの埋め込みソース列サイズ | インデックスごと | 32764バイト |
Direct Vectorインデックスの一括アップサートリクエストのサイズ | インデックスごと | 10MB |
Direct Vectorインデックスの一括削除リクエストのサイズ | インデックスごと | 10MB |
クエリーAPIには、次の制限が適用されます。
リソース | 粒度 | 上限 |
|---|---|---|
クエリテキストの長さ | クエリごと | 32764文字 |
ハイブリッド検索を使用する場合のトークン | クエリごと | 1024語または2バイト文字 |
フィルター条件 | フィルター句ごと | 1024個の要素 |
返される結果の最大数(近似最近傍検索) | クエリごと | 10,000 |
返される結果の最大数(ハイブリッドキーワード類似検索) | クエリごと | 200 |
返される結果の最大数(全文検索) | クエリごと | 200 |
応答サイズ | クエリごと | 10MB |
制限事項
- 列名
_id予約されています。ソース テーブルに_idという名前の列がある場合は、ベクトル検索インデックスを作成する前に名前を変更してください。 - 行および列レベルの権限はサポートされていません。ただし、フィルターAPI 使用してアプリケーションレベルのACLを独自に実装することは可能です。
- インデックスを別のワークスペースに複製することはできません。Databricks SDK または REST API を使用して、ワークスペース間の要求を行うことができます。
- インデックスの容量は、インデックス作成時のソーステーブルのサイズに基づいてプロビジョニングされます。ソーステーブルのサイズが小さいと、インデックスの拡張範囲が制限され、容量不足エラーが発生する可能性があります。そのため、インデックスを作成する前に、想定されるデータ量に合わせてソーステーブルのサイズを調整してください。
ストレージ最適化エンドポイントの制限
このセクションの制限は、ストレージ最適化エンドポイントにのみ適用されます。ストレージ最適化エンドポイントはパブリック プレビュー段階です。
-
連続同期モードはサポートされていません。
-
同期する列はサポートされていません。
-
埋め込み次元は 16 で割り切れる必要があります。
-
増分更新は部分的にサポートされています。すべての同期は、一斉検索インデックスの一部を再構築する必要があります。
- マネージド インデックスの場合、ソース行が変更されていない場合、以前にコンピュートされた埋め込みが再利用されます。
- 標準エンドポイントと比較すると、同期に必要な時間がエンドツーエンドで大幅に短縮されることが予想されます。10 億の埋め込みを持つデータセットは、8 時間以内に同期を完了するはずです。データセットが小さいほど、同期にかかる時間は短くなります。
-
FedRAMP 準拠のワークスペースはサポートされていません。
-
顧客管理キー (CMK) はサポートされていません。
-
マネージド Delta Sync インデックスにカスタム埋め込みモデルを使用するには、カスタム モデルと外部モデルの AI クエリプレビューを有効にする必要があります。プレビューを有効にする方法については、 「Databricks プレビューの管理」を参照してください。
-
ストレージ最適化エンドポイントは、768 次元のベクトルの埋め込みを最大 10 億個サポートします。より大規模なユースケースがある場合は、アカウント チームにお問い合わせください。