Topik ini menjelaskan cara melakukan pencarian kesamaan berkelompok dalam koleksi menggunakan DashVector SDK untuk Python.
Prasyarat
Kluster telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster.
Kunci API telah diperoleh. Untuk informasi lebih lanjut, lihat Kelola kunci API.
SDK versi terbaru telah diinstal. Untuk informasi lebih lanjut, lihat Instal DashVector SDK.
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
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 retLakukan 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
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
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
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. |