メインコンテンツまでスキップ

共通検索インデックスをクエリする

この記事では、フィルタや再ランキングの使用方法を含め、高速検索インデックスをクエリする方法について説明します。

たとえば、連続検索エンドポイントとインデックスを作成およびクエリする方法を説明するノートブックについては、 「連続検索サンプル ノートブック」を参照してください。 リファレンス情報については、 Python SDK リファレンスを参照してください。

インストール

地下鉄検索SDK使用するには、ノートブックにインストールする必要があります。 パッケージをインストールするには、次のコードを使用します。

%pip install databricks-vectorsearch
dbutils.library.restartPython()

次に、次のコマンドを使用してVectorSearchClientをインポートします。

from databricks.vector_search.client import VectorSearchClient

認証に関する情報については、 「データ保護と認証」を参照してください。

トレンド検索インデックスをクエリする方法

ベクトル検索インデックスをクエリできるのは、Python SDK、REST API、または SQL vector_search() AI 関数を使用する場合のみです。

注記

インデックスをクエリするユーザーが、随時検索インデックスの所有者ではない場合、ユーザーは次の UC 権限を持っている必要があります。

  • USE CATALOGストッパー検索インデックスを含むカタログ上で使用します。
  • ベクトル検索インデックスを含むスキーマで USE SCHEMA を使用します。
  • ベクトル検索インデックスに対するSELECT権限。

デフォルトのクエリ タイプはann (近似最近傍) です。ハイブリッド キーワード類似性検索を実行するには、パラメーターquery_typehybridに設定します。 ハイブリッド検索では、すべてのテキスト メタデータ列が含まれ、最大 200 件の結果が返されます。

クエリでリランカーを使用するには、 「クエリでリランカーを使用する」を参照してください。

備考

ベータ版

全文検索はベータ機能として利用できます。全文検索を実行するには、パラメーターquery_typeFULL_TEXTに設定します。 全文検索では、ベクトルエンべディングを使用せずに、キーワードの一致に基づいて最大 200 件の結果を取得できます。

詳細については、 Python SDK リファレンスを参照してください。

Python
# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2
)

# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="hybrid"
)

# Delta Sync Index using full-text search (Beta)
results4 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="FULL_TEXT"
)

# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
query_vector=[0.9] * 1024,
columns=["id", "text"],
num_results=2
)

クエリにフィルターを使用する

クエリでは、Delta テーブル内の任意の列に基づいてフィルターを定義できます。similarity_search指定されたフィルターに一致する行のみを返します。

次の表に、サポートされているフィルターを示します。

フィルタ演算子

挙動

NOT

標準 : フィルターを無効にします。キーは「NOT」で終わる必要があります。たとえば、値が「red」である「color NOT」は、色が赤ではないドキュメントと一致します。

ストレージ最適化 : != (bangeq 符号) 演算子を参照してください。

標準{"id NOT": 2} {“color NOT”: “red”}

ストレージ最適化 : "id != 2" "color != 'red'"

<

標準 : フィールド値がフィルター値より小さいかどうかを確認します。キーは「<」で終わる必要があります。たとえば、値が 200 の「price <」は、価格が 200 未満のドキュメントに一致します。

ストレージ最適化 : < (lt 記号) 演算子を参照してください。

標準{"id <": 200}

ストレージ最適化 : "id < 200"

<=

標準 : フィールド値がフィルター値以下かどうかをチェックします。キーは「<=」で終わる必要があります。たとえば、値が 200 の「price <=」は、価格が 200 以下のドキュメントに一致します。

ストレージ最適化 : <= (lt eq 記号) 演算子を参照してください。

標準{"id <=": 200}

ストレージ最適化 : "id <= 200"

>

標準 : フィールド値がフィルター値より大きいかどうかを確認します。キーは「>」で終わる必要があります。たとえば、値が 200 の「price >」は、価格が 200 より大きいドキュメントに一致します。

ストレージ最適化 : > (gt sign) 演算子を参照してください。

標準{"id >": 200}

ストレージ最適化 : "id > 200"

>=

標準 : フィールド値がフィルター値以上かどうかを確認します。キーは「>=」で終わる必要があります。たとえば、値が 200 の「price >=」は、価格が 200 以上のドキュメントに一致します。

ストレージ最適化 : >= (gt eq sign) 演算子を参照してください。

標準{"id >=": 200}

ストレージ最適化 : "id >= 200"

OR

標準 : フィールド値がフィルター値のいずれかと一致するかどうかを確認します。複数のサブキーを区切るには、キーにORを含める必要があります。たとえば、値が["red", "blue"]であるcolor1 OR color2color1redであるか、 color2blueであるドキュメントと一致します。

ストレージ最適化 : or演算子を参照してください。

標準{"color1 OR color2": ["red", "blue"]}

ストレージ最適化 : "color1 = 'red' OR color2 = 'blue'"

LIKE

標準 : 文字列内の空白で区切られたトークンと一致します。以下のコード例を参照してください。

ストレージ最適化 : like演算子を参照してください。

標準{"column LIKE": "hello"}

ストレージ最適化 : "column LIKE 'hello'"

フィルタ演算子が指定されていません

標準 : フィルターは完全一致をチェックします。複数の値を指定した場合、いずれかの値と一致します。

ストレージ最適化 : = (eq 記号) 演算子in述語を参照してください。

標準{"id": 200} {"id": [200, 300]}

ストレージ最適化 : "id = 200" "id IN (200, 300)"

to_timestamp (ストレージ最適化エンドポイントのみ)

ストレージ最適化 : タイムスタンプでフィルタリングします。to_timestamp関数を参照

ストレージ最適化 : "date > TO_TIMESTAMP('1995-01-01')"

次のコード例を参照してください。

Python
# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title": ["Ares", "Athena"]},
num_results=2
)

# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title OR id": ["Ares", "Athena"]},
num_results=2
)

# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title NOT": "Hercules"},
num_results=2
)

クエリでリランカーを使用する

備考

プレビュー

この機能は パブリック プレビュー段階です。

エージェントのパフォーマンスは、クエリに最も関連性の高い情報を取得するかどうかに依存します。再ランク付けは、取得したドキュメントを評価して、意味的に最も関連性の高いドキュメントを特定することで、検索品質を向上させる手法です。Databricks は、これらの文書を識別するための研究ベースの複合AI システムを開発しました。また、各ドキュメントの関連性を評価するときに、リランカーが追加のコンテキストに使用するメタデータを含む列を指定することもできます。

再ランク付けにより、若干の遅延が発生しますが、検索品質とエージェントのパフォーマンスが大幅に向上します。Databricks では、あらゆる RAG エージェントの使用例で再ランク付けを試すことを推奨しています。

このセクションの例では、ベクトル検索リランカーの使用方法を示します。再ランク付け機能を使用する場合、返される列 ( columns ) と再ランク付けに使用するメタデータ列 ( columns_to_rerank ) を個別に設定します。num_resultsは返される結果の最終的な数です。これは、再ランク付けに使用される結果の数には影響しません。

クエリ デバッグ メッセージには、ステップの再ランキングにかかった時間に関する情報が含まれています。 例えば:

Bash
'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}

再ランク付け呼び出しが失敗した場合、その情報はデバッグ メッセージに含まれます。

Bash
'debug_info': {'response_time': 587.0, 'ann_time': 331.0, 'reranker_time': 246.0, 'warnings': [{'status_code': 'RERANKER_TEMPORARILY_UNAVAILABLE', 'message': 'The reranker is temporarily unavailable. Results returned have not been processed by the reranker. Please try again later for reranked results.'}]}
注記

columns_to_rerankにリストされる列の順序は重要です。再ランク付けの計算では、列がリストされている順序で取得され、見つかった最初の 2000 文字のみが考慮されます。

Python
# Install the most recent version.
# Databricks SDK version 0.57 or above is required to use the reranker.
%pip install databricks-vectorsearch --force-reinstall
dbutils.library.restartPython()
Python
from databricks.vector_search.reranker import DatabricksReranker

results = index.similarity_search(
query_text = "How to create a Vector Search index",
columns = ["id", "text", "parent_doc_summary", "date"],
num_results = 10,
query_type = "hybrid",
reranker=DatabricksReranker(columns_to_rerank=["text", "parent_doc_summary", "other_column"])
)