🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Panduan Pengguna
  • Home
  • Docs
  • Panduan Pengguna

  • Cari & Beri Peringkat Ulang

  • Iterator Pencarian

Iterator Pencarian

Pencarian ANN memiliki batas maksimum jumlah entitas yang dapat dipanggil dalam satu kueri, dan hanya dengan menggunakan Pencarian ANN dasar mungkin tidak dapat memenuhi permintaan pencarian berskala besar. Untuk permintaan Pencarian ANN di mana topK melebihi 16.384, disarankan untuk mempertimbangkan menggunakan SearchIterator. Bagian ini akan memperkenalkan cara menggunakan SearchIterator dan pertimbangan terkait.

Ikhtisar

Permintaan Pencarian mengembalikan hasil pencarian, sementara SearchIterator mengembalikan iterator. Anda bisa memanggil metode next() dari iterator ini untuk mendapatkan hasil pencarian.

Secara khusus, Anda dapat menggunakan SearchIterator sebagai berikut.

  1. Buat SearchIterator dan tetapkan jumlah entitas yang akan dikembalikan per permintaan pencarian dan jumlah total entitas yang akan dikembalikan.

  2. Panggil metode next() dari SearchIterator dalam satu perulangan untuk mendapatkan hasil pencarian dengan cara berpigura.

  3. Panggil metode close() dari iterator untuk mengakhiri perulangan jika metode next() mengembalikan hasil kosong.

Membuat SearchIterator

Cuplikan kode berikut ini menunjukkan cara membuat SearchIterator.

from pymilvus import connections, Collection

connections.connect(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# create iterator
query_vectors = [
    [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]]

collection = Collection("iterator_collection")

iterator = collection.search_iterator(
    data=query_vectors,
    anns_field="vector",
    param={"metric_type": "L2", "params": {"nprobe": 16}},
    # highlight-next-line
    batch_size=50,
    output_fields=["color"],
    # highlight-next-line
    limit=20000
)

import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.orm.iterator.SearchIterator;
import io.milvus.v2.common.IndexParam.MetricType;
import io.milvus.v2.service.vector.request.data.FloatVec;

import java.util.*;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .token("root:Milvus")
        .build());

FloatVec queryVector = new FloatVec(new float[]{0.3580376395471989f, -0.6023495712049978f, 0.18414012509913835f, -0.26286205330961354f, 0.9029438446296592f});
SearchIterator searchIterator = client.searchIterator(SearchIteratorReq.builder()
        .collectionName("iterator_collection")
        .vectors(Collections.singletonList(queryVector))
        .vectorFieldName("vector")
        .batchSize(500L)
        .outputFields(Lists.newArrayList("color"))
        .topK(20000)
        .metricType(IndexParam.MetricType.COSINE)
        .build());

Pada contoh di atas, Anda telah mengatur jumlah entitas yang akan dikembalikan per pencarian(batch_size/batchSize) menjadi 50, dan jumlah total entitas yang akan dikembalikan(topK) menjadi 20.000.

Menggunakan SearchIterator

Setelah SearchIterator siap, Anda dapat memanggil metode next() untuk mendapatkan hasil pencarian dengan cara yang berurutan.

results = []

while True:
    # highlight-next-line
    result = iterator.next()
    if not result:
        # highlight-next-line
        iterator.close()
        break
    
    for hit in result:
        results.append(hit.to_dict())

import io.milvus.response.QueryResultsWrapper;

while (true) {
    List<QueryResultsWrapper.RowRecord> res = searchIterator.next();
    if (res.isEmpty()) {
        searchIterator.close();
        break;
    }

    for (QueryResultsWrapper.RowRecord record : res) {
        System.out.println(record);
    }
}

Pada contoh kode di atas, Anda telah membuat perulangan tak terbatas dan memanggil metode next() di dalam perulangan untuk menyimpan hasil pencarian di sebuah variabel dan menutup iterator ketika next() tidak menghasilkan apa-apa.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?