Collection.query() は、DashVector コレクション内で指定されたベクターまたは既存ドキュメントのベクターと類似するドキュメントを検索します。また、メタデータフィルターのみを用いてドキュメントを取得することもできます。
クエリモード
Collection.query() は、指定するパラメーターに応じて 5 種類のクエリモードをサポートします。
| モード | 必須パラメーター | 説明 |
|---|---|---|
| ベクター検索 | vector | 指定された密ベクターに最も近いドキュメントを検索します。 |
| プライマリキー検索 | id | 既存ドキュメントのベクターに最も近いドキュメントを検索します。 |
| フィルター付きベクター検索 | vector または id + filter | 類似検索とメタデータフィルタリングを組み合わせます。 |
| ハイブリッド検索 | vector + sparse_vector | 密ベクターと疎ベクターを組み合わせたキーワード対応型セマンティック検索を実行します。 |
| 一致検索 | filter のみ | 類似順位付けを行わず、メタデータフィルターのみでドキュメントを取得します。 |
vectorおよびidのいずれも指定されない場合、query()は条件付きフィルターのみを使用した一致検索を実行します。
前提条件
開始する前に、以下の準備が完了していることを確認してください。
DashVector クラスター。詳細については、「クラスターの作成」をご参照ください。
API キー。詳細については、「API キーの管理」をご参照ください。
DashVector SDK(最新バージョン)。詳細については、「DashVector SDK のインストール」をご参照ください。
既にドキュメントが挿入済みのコレクション。詳細については、「コレクションの作成」および「ドキュメントの挿入」をご参照ください。
API シグネチャ
Collection.query(
vector: Optional[Union[List[Union[int, float]], np.ndarray]] = None,
id: Optional[str] = None,
topk: int = 10,
filter: Optional[str] = None,
include_vector: bool = False,
partition: Optional[str] = None,
output_fields: Optional[List[str]] = None,
sparse_vector: Optional[Dict[int, float]] = None,
async_req: False
) -> DashVectorResponseリクエストパラメーター
| パラメーター | 型 | デフォルト値 | 説明 |
|---|---|---|---|
vector | Optional[Union[List[Union[int, float]], np.ndarray]] | None | 類似検索用の密ベクター。 |
id | Optional[str] | None | 既存ドキュメントのプライマリキー。検索では、当該ドキュメントのベクターが使用されます。 |
topk | int | 10 | 返される結果の最大件数(類似度順にランク付け)。 |
filter | Optional[str] | None | SQL WHERE 句構文を用いた条件付きフィルター。詳細については、「条件付きフィルタリング」をご参照ください。 |
include_vector | bool | False | 応答にベクター情報を含めるかどうか。 |
partition | Optional[str] | None | パーティション名。検索範囲を特定のパーティションに制限します。 |
output_fields | Optional[List[str]] | None | 返却するフィールド。デフォルトではすべてのフィールドが返却されます。 |
sparse_vector | Optional[Dict[int, float]] | None | キーワード対応型セマンティック検索用の疎ベクター。各キーはディメンションのインデックス、各値は重みです。 |
async_req | bool | False | 非同期モードを有効にするかどうか。 |
応答
query() は DashVectorResponse オブジェクトを返します。
| フィールド | 型 | 説明 | 例 |
|---|---|---|---|
code | int | ステータスコード。0 は成功を示します。詳細については、「ステータスコード」をご参照ください。 | 0 |
message | str | ステータスメッセージ。 | success |
request_id | str | 一意のリクエスト識別子。 | 19215409-ea66-4db9-8764-26ce2eb5bb99 |
output | List[<code data-tag="code" class="inline-code___exakR" id="code_d6787a3c">Doc</code>] | 類似検索の結果。 | -- |
サンプル
以下のすべてのサンプルでは、次のクライアント設定を使用します。プレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 |
|---|---|
YOUR_API_KEY | DashVector コンソールから取得した API キー |
YOUR_CLUSTER_ENDPOINT | クラスターエンドポイントの URL |
import dashvector
import numpy as np
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
# 対象となるコレクションを取得
collection = client.get(name='quickstart')これらのサンプルを実行する前に、quickstart コレクションを作成し、ドキュメントを挿入してください。詳細については、「コレクションの作成」および「ドキュメントの挿入」をご参照ください。ベクターによる検索
密ベクターを指定して、最も類似するドキュメントを検索します。
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4]
)
# クエリメソッドが正常に呼び出されたかを確認します。
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)結果セットをカスタマイズするには、topk、output_fields、および include_vector を指定します。
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
topk=100,
output_fields=['name', 'age'], # name および age フィールドのみを返却します。
include_vector=True
)プライマリキーによる検索
id パラメーターを使用して、保存済みドキュメントのベクターで検索します。ベクター値を直接指定する必要はありません。
ret = collection.query(
id='1'
)
# クエリメソッドが正常に呼び出されたかを確認します。
if ret:
print('query success')
print(len(ret))
for doc in ret:
print(doc)
print(doc.id)
print(doc.vector)
print(doc.fields)id に topk および output_fields を組み合わせる方法は、ベクター検索の場合と同じです。
ret = collection.query(
id='1',
topk=100,
output_fields=['name', 'age'], # name および age フィールドのみを返却します。
include_vector=True
)条件付きフィルターによる検索
結果をメタデータで絞り込むために、filter パラメーターを追加します。フィルターは SQL WHERE 句構文に従います。
# ベクターまたはプライマリキーと条件付きフィルターを併用した類似検索を実行します。
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # 検索用のベクターを指定します。代わりに、検索用のプライマリキーを指定することもできます。
topk=100,
filter='age > 18', # age フィールドの値が 18 より大きいドキュメントに対して一致検索を実行します。
output_fields=['name', 'age'], # name および age フィールドのみを返却します。
include_vector=True
)ヒント:filterをidと組み合わせることで、プライマリキーに基づく検索結果をフィルター処理できます(vectorを使用する必要はありません)。
密ベクターと疎ベクターを併用したハイブリッド検索
密ベクターと疎ベクターを組み合わせてキーワード対応型セマンティック検索を実行します。疎ベクターは、密埋め込みを補完するキーワードの重みを表します。
# 密ベクターと疎ベクターの両方を用いた類似検索を実行します。
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4], # 検索用のベクターを指定します。
sparse_vector={1: 0.3, 20: 0.7}
)構成の詳細については、「キーワード対応型セマンティック検索」をご参照ください。
フィルターのみによる一致検索
vector および id の両方を省略することで、類似順位付けを行わず、メタデータ条件のみに基づいてドキュメントを取得できます。
# ベクターおよびプライマリキーを指定せずに、条件付きフィルターのみを用いた一致検索を実行します。
ret = collection.query(
topk=100,
filter='age > 18', # age フィールドの値が 18 より大きいドキュメントに対して一致検索を実行します。
output_fields=['name', 'age'], # name および age フィールドのみを返却します。
include_vector=True
)次のステップ
キーワード対応型セマンティック検索 — 密ベクターと疎ベクターを組み合わせることで、検索精度を向上させます。
条件付きフィルタリング — フィルター式の完全な構文リファレンス。