全部产品
Search
文档中心

DashVector:Pencarian vektor berkelompok

更新时间:Jul 02, 2025

Topik ini menjelaskan cara mengelompokkan hasil pencarian vektor.

Latar Belakang

Dalam beberapa skenario, hasil pencarian vektor perlu dikelompokkan. Berikut adalah beberapa contohnya:

  • Dalam sistem generasi yang diperkaya dengan pengambilan data (RAG), dokumen sering dibagi menjadi beberapa segmen. Setiap segmen diubah menjadi vektor dan disimpan di DashVector. Untuk mendapatkan hasil yang beragam dalam pencarian vektor, pengguna mengharapkan segmen-segmen paling mirip dari dokumen yang berbeda dikembalikan.

  • Dalam skenario pencarian gambar produk, beberapa gambar sering dibuat untuk sebuah produk, dan setiap gambar diubah menjadi vektor dan disimpan di DashVector. Untuk mendapatkan hasil yang beragam dalam pencarian vektor, pengguna berharap bahwa gambar-gambar paling mirip dari produk yang berbeda dikembalikan.

DashVector mendukung fitur pencarian vektor berkelompok, yang memungkinkan Anda memanggil operasi pencarian dokumen berkelompok dan menetapkan group_by_field ke ID dokumen dan ID produk masing-masing dalam skenario di atas. Untuk informasi lebih lanjut, lihat Pencarian Dokumen Berkelompok.

Contoh

Prasyarat

Masukkan dokumen dengan bidang

Catatan

Ganti YOUR_API_KEY dengan kunci API Anda dan YOUR_CLUSTER_ENDPOINT dengan titik akhir kluster Anda dalam kode contoh agar kode dapat berjalan dengan benar.

import dashvector
import numpy as np

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
ret = client.create(
    name='group_by_demo',
    dimension=4,
    fields_schema={'document_id': str, 'chunk_id': int}
)
assert ret

collection = client.get(name='group_by_demo')

ret = collection.insert([
    ('1', np.random.rand(4), {'document_id': 'paper-01', 'chunk_id': 1, 'content': 'xxxA'}),
    ('2', np.random.rand(4), {'document_id': 'paper-01', 'chunk_id': 2, 'content': 'xxxB'}),
    ('3', np.random.rand(4), {'document_id': 'paper-02', 'chunk_id': 1, 'content': 'xxxC'}),
    ('4', np.random.rand(4), {'document_id': 'paper-02', 'chunk_id': 2, 'content': 'xxxD'}),
    ('5', np.random.rand(4), {'document_id': 'paper-02', 'chunk_id': 3, 'content': 'xxxE'}),
    ('6', np.random.rand(4), {'document_id': 'paper-03', 'chunk_id': 1, 'content': 'xxxF'}),
])
assert ret

Lakukan pencarian vektor berkelompok

ret = collection.query_group_by(
    vector=[0.1, 0.2, 0.3, 0.4],
    group_by_field='document_id',  # Kelompokkan hasil berdasarkan nilai pada bidang document_id.
    group_count=2,  # Kembalikan dua kelompok.
    group_topk=2,   # Kembalikan hingga dua dokumen dari setiap kelompok.
)
# Periksa apakah operasi berhasil.
if ret:
    print('query_group_by berhasil')
    print(len(ret))
    print('------------------------')
    for group in ret:
        print('kunci kelompok:', group.group_id)
        for doc in group.docs:
            prefix = ' -'
            print(prefix, doc)

Contoh keluaran adalah sebagai berikut:

query_group_by berhasil
4
------------------------
kunci kelompok: paper-01
 - {"id": "2", "fields": {"document_id": "paper-01", "chunk_id": 2, "content": "xxxB"}, "score": 0.6807}
 - {"id": "1", "fields": {"document_id": "paper-01", "chunk_id": 1, "content": "xxxA"}, "score": 0.4289}
kunci kelompok: paper-02
 - {"id": "3", "fields": {"document_id": "paper-02", "chunk_id": 1, "content": "xxxC"}, "score": 0.6553}
 - {"id": "5", "fields": {"document_id": "paper-02", "chunk_id": 3, "content": "xxxE"}, "score": 0.4401}

Batasan

Penting
  1. Untuk parameter group_by_field, Anda hanya dapat menentukan bidang yang didefinisikan menggunakan parameter fields_schema saat membuat koleksi. Bidang tanpa skema tidak mendukung pencarian berkelompok. Untuk informasi lebih lanjut, lihat Buat Koleksi dan Tanpa Skema.

  2. group_count dan group_topk merupakan parameter usaha terbaik. Nilai kembalian dapat lebih kecil dari nilai yang ditentukan. DashVector memberikan prioritas lebih tinggi pada group_count.

  3. Nilai yang lebih besar dari group_count dan group_topk meningkatkan beban pemindaian indeks, sehingga meningkatkan waktu yang diperlukan untuk pemanggilan API. Saat ini, nilai maksimum dari group_count adalah 64 dan nilai maksimum dari group_topk adalah 16.