単一のグループ化されたクエリで、ドキュメントごとに最も関連性の高いチャンクを取得します。結果は、指定したフィールド (例: document_id) によって整理されるため、各グループは最も一致するチャンクのみを表示します。これは、検索拡張生成 (RAG) パイプラインで特に有用です。RAG パイプラインでは、同じファイルからの複数のフラグメントではなく、ソースドキュメントごとに1つの代表的な結果が必要となります。
前提条件
開始する前に、以下があることを確認してください。
エンドポイント
POST https://{Endpoint}/v1/collections/{CollectionName}/query_group_by注意事項
リクエストボディで
vectorまたはidのいずれかを指定します。少なくとも1つは必須です。group_by_fieldはスキーマフリーフィールドをサポートしていません。定義されたスキーマを持つフィールドのみが受け入れられます。group_countとgroup_topkはベストエフォート型パラメーターです。サービスはこれらを尊重するために合理的な試みを行いますが、正確な結果は保証されません。group_topkはgroup_countよりも優先度が低いです。
例
すべての例は group_by_demo コレクションを使用しています。このコレクションの設定方法の詳細については、「グループ化されたベクター検索」をご参照ください。
例を実行する前に、YOUR_API_KEY をご利用の API キーに、YOUR_CLUSTER_ENDPOINT をご利用のクラスターエンドポイントに置換します。
ベクターによる検索
密ベクターを送信して、グループごとに最も一致するチャンクを見つけます。
curl -XPOST \
-H 'dashvector-auth-token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4], // 密クエリベクター
"group_by_field": "document_id", // 結果をグループ化するフィールド
"group_topk": 1, // グループごとに返されるチャンク
"group_count": 3, // グループの最大数
"include_vector": true
}' \
https://YOUR_CLUSTER_ENDPOINT/v1/collections/group_by_demo/query_group_by応答は output の下に結果をグループ化し、各エントリには group_id と docs 配列が含まれます。
{
"code": 0,
"request_id": "d6df634a-683d-445e-abe0-d547091d6b3a",
"message": "Success",
"output": [
{
"docs": [
{
"id": "4",
"vector": [0.621783971786499, 0.5220040082931519, 0.8403469920158386, 0.995602011680603],
"fields": {
"document_id": "paper-02",
"content": "xxxD",
"chunk_id": 2
},
"score": 0.028402328
}
],
"group_id": "paper-02"
},
{
"docs": [
{
"id": "1",
"vector": [0.26870301365852356, 0.8718249797821045, 0.6066280007362366, 0.6342290043830872],
"fields": {
"document_id": "paper-01",
"content": "xxxA",
"chunk_id": 1
},
"score": 0.08141637
}
],
"group_id": "paper-01"
},
{
"docs": [
{
"id": "6",
"vector": [0.661965012550354, 0.730430006980896, 0.6105219721794128, 0.22164000570774078],
"fields": {
"document_id": "paper-03",
"content": "xxxF",
"chunk_id": 1
},
"score": 0.2513085
}
],
"group_id": "paper-03"
}
]
}プライマリキーによる検索
特定のプライマリキーに保存されているベクターをクエリとして使用します。
curl -XPOST \
-H 'dashvector-auth-token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"filter": "chunk_id > 1", // chunk_id が 1 より大きいチャンクのみを考慮します。
"group_by_field": "document_id",
"group_topk": 1,
"group_count": 3,
"include_vector": true
}' \
https://YOUR_CLUSTER_ENDPOINT/v1/collections/group_by_demo/query条件付きフィルターによる検索
グループ化する前に候補セットを絞り込むために filter を追加します。フィルターは SQL WHERE 句の構文に従う必要があります。
curl -XPOST \
-H 'dashvector-auth-token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"filter": "chunk_id > 1", // chunk_id > 1 のチャンクのみを考慮します
"group_by_field": "document_id",
"group_topk": 1,
"group_count": 3,
"include_vector": true
}' \
https://YOUR_CLUSTER_ENDPOINT/v1/collections/group_by_demo/queryフィルター構文の詳細については、「条件付きフィルタリング」をご参照ください。
密ベクターと疎ベクターによる検索
ハイブリッド取得のために密ベクターと疎ベクターを組み合わせます。
curl -XPOST \
-H 'dashvector-auth-token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4], // 密ベクター
"sparse_vector": {"1": 0.4, "10000": 0.6, "222222": 0.8}, // 疎ベクター
"group_by_field": "document_id",
"group_topk": 1,
"group_count": 3,
"include_vector": true
}' \
https://YOUR_CLUSTER_ENDPOINT/v1/collections/group_by_demo/queryリクエストパラメーター
| パラメーター | ロケーション | タイプ | 必須 | 説明 |
|---|---|---|---|---|
{Endpoint} | path | str | Yes | クラスターエンドポイント。コンソールの「クラスター詳細」ページで確認できます。 |
{CollectionName} | path | str | Yes | コレクションの名前。 |
dashvector-auth-token | header | str | Yes | API キー。 |
group_by_field | body | str | Yes | 結果をグループ化するフィールド。スキーマフリーフィールドはサポートされていません。 |
group_count | body | int | No | 返されるグループの最大数。ベストエフォート型であり、正確な数は保証されません。 |
group_topk | body | int | No | グループごとの結果の最大数。ベストエフォート型であり、group_count よりも優先度が低いです。 |
vector | body | array | No | 密クエリベクター。id が指定されていない場合は必須です。 |
sparse_vector | body | dict | No | 疎クエリベクター。 |
id | body | str | No | プライマリキー。類似検索では、このキーに保存されているベクターが使用されます。vector が指定されていない場合は必須です。 |
filter | body | str | No | SQL WHERE 句の構文を使用した条件付きフィルター。詳細については、「条件付きフィルタリング」をご参照ください。 |
include_vector | body | bool | No | 応答にベクターを含めるかどうかを指定します。デフォルト: false。 |
output_fields | body | array | No | 各結果に含めるフィールド。デフォルトではすべてのフィールドが返されます。フィールドを返さない場合は [] を渡します。 |
partition | body | str | No | 検索対象のパーティションの名前。 |
応答パラメーター
| パラメーター | タイプ | 説明 | 例 |
|---|---|---|---|
code | int | 状態コード。「状態コード」をご参照ください。 | 0 |
message | str | 状態メッセージ。 | success |
request_id | str | リクエスト ID。 | 19215409-ea66-4db9-8764-26ce2eb5bb99 |
output | array | グループ化された結果。各エントリには group_id と docs 配列が含まれます。「データ型」のグループセクションをご参照ください。 | — |