全部产品
Search
文档中心

DashVector:Pencarian dokumen berkelompok

更新时间:Jul 02, 2025

Topik ini menjelaskan cara melakukan pencarian kesamaan berkelompok dalam koleksi menggunakan DashVector SDK untuk Python.

Prasyarat

Definisi API

Collection.query_group_by(
        self,
        vector: Optional[Union[List[Union[int, float]], np.ndarray]] = None,
        *,
        group_by_field: str,
        group_count: int = 10,
        group_topk: int = 10,
        id: Optional[str] = None,
        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: bool = False,
    ) -> DashVectorResponse:

Contoh

Catatan

Anda perlu mengganti 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 kesamaan berkelompok menggunakan vektor

ret = collection.query_group_by(
    vector=[0.1, 0.2, 0.3, 0.4],
    group_by_field='document_id',  # Kelompokkan hasil berdasarkan nilai dari field 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 sukses')
    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 sukses
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}

Lakukan pencarian kesamaan berkelompok menggunakan vektor yang terkait dengan kunci utama

ret = collection.query_group_by(
    id='1',
    group_by_field='name',
)
# Periksa apakah metode query berhasil dipanggil.
if ret:
    print('query_group_by sukses')
    print(len(ret))
    for group in ret:
        print('kelompok:', group.group_id)
        for doc in group.docs:
            print(doc)
            print(doc.id)
            print(doc.vector)
            print(doc.fields)

Lakukan pencarian kesamaan berkelompok menggunakan vektor atau kunci utama dan filter kondisional

# Lakukan pencarian kesamaan berkelompok menggunakan vektor atau kunci utama dan filter kondisional.
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # Tentukan vektor untuk pencarian. Sebagai alternatif, Anda dapat menentukan kunci utama untuk pencarian.
    group_by_field='name',
    filter='age > 18',             # Tentukan filter untuk melakukan pencocokan pada dokumen yang nilainya pada field age lebih besar dari 18.
    output_fields=['name', 'age'], # Kembalikan hanya field name dan age.
    include_vector=True
)

Lakukan pencarian berkelompok menggunakan vektor padat dan jarang

Catatan

Anda dapat menggunakan vektor jarang untuk merepresentasikan bobot kata kunci guna menerapkan pencarian vektor semantik berbasis kata kunci.

# Lakukan pencarian kesamaan berkelompok menggunakan vektor padat dan jarang.
ret = collection.query(
    vector=[0.1, 0.2, 0.3, 0.4],   # Tentukan vektor untuk pencarian.
    sparse_vector={1: 0.3, 20: 0.7},
    group_by_field='name',
)

Parameter permintaan

Catatan

Anda harus menentukan parameter vector atau id.

Parameter

Tipe

Nilai default

Deskripsi

group_by_field

str

None

Wajib. Nama field berdasarkan mana pencarian berkelompok dilakukan. Field tanpa skema tidak didukung.

vector

Optional[Union[List[Union[int, float]], np.ndarray]]

None

Opsional. Vektor.

id

Optional[str]

None

Opsional. Kunci utama. Pencarian kesamaan dilakukan berdasarkan vektor yang terkait dengan kunci utama.

group_count

int

10

Opsional. Jumlah maksimum kelompok yang akan dikembalikan. Ini adalah parameter usaha terbaik. Secara umum, jumlah kelompok yang ditentukan dapat dikembalikan.

group_topk

int

10

Opsional. Jumlah hasil serupa yang akan dikembalikan per kelompok. Ini adalah parameter usaha terbaik dan memiliki prioritas lebih rendah daripada group_count.

filter

Optional[str]

None

Opsional. Filter kondisional, yang harus mematuhi sintaks klausa SQL WHERE. Untuk informasi lebih lanjut, lihat Penyaringan kondisional.

include_vector

bool

False

Opsional. Menentukan apakah akan mengembalikan data vektor.

partition

Optional[str]

None

Opsional. Nama partisi.

output_fields

Optional[List[str]]

None

Opsional. Field yang akan dikembalikan. Secara default, semua field dikembalikan.

sparse_vector

Optional[Dict[int, float]]

None

Opsional. Vektor jarang.

async_req

bool

False

Opsional. Menentukan apakah akan mengaktifkan mode asinkron.

Parameter respons

Catatan

Objek DashVectorResponse dikembalikan, yang berisi hasil operasi seperti yang dijelaskan dalam tabel berikut.

Parameter

Tipe

Deskripsi

Contoh

code

int

Kode status yang dikembalikan. Untuk informasi lebih lanjut, lihat Kode status.

0

message

str

Pesan yang dikembalikan.

sukses

request_id

str

ID unik dari permintaan.

19215409-ea66-4db9-8764-26ce2eb5bb99

output

List[Group]

Hasil serupa berkelompok.