🚀 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

  • Pencarian Rentang

Pencarian Rentang

Pencarian rentang meningkatkan relevansi hasil pencarian dengan membatasi jarak atau skor entitas yang dikembalikan dalam rentang tertentu. Halaman ini membantu Anda memahami apa itu pencarian rentang dan prosedur untuk melakukan pencarian rentang.

Ikhtisar

Saat menjalankan permintaan Pencarian Rentang, Milvus menggunakan vektor yang paling mirip dengan vektor kueri dari hasil Pencarian ANN sebagai pusat, dengan radius yang ditentukan dalam permintaan Pencarian sebagai radius lingkaran luar, dan range_filter sebagai radius lingkaran dalam untuk menggambar dua lingkaran konsentris. Semua vektor dengan nilai kemiripan yang berada di dalam wilayah lingkaran yang dibentuk oleh dua lingkaran konsentris ini akan dikembalikan. Di sini, range_filter dapat diatur ke 0, yang mengindikasikan bahwa semua entitas yang berada di dalam nilai kemiripan yang ditentukan (radius) akan dikembalikan.

Range search Pencarian rentang

Diagram di atas menunjukkan bahwa permintaan pencarian rentang membawa dua parameter: radius dan range_filter. Setelah menerima permintaan pencarian rentang, Milvus melakukan hal berikut.

  • Gunakan jenis metrik yang ditentukan(COSINE) untuk menemukan semua sematan vektor yang paling mirip dengan vektor kueri.

  • Saring sematan vektor yang jarak atau nilainya ke vektor kueri berada dalam rentang yang ditentukan oleh parameter radius dan range_filter.

  • Kembalikan entitas-K teratas dari yang difilter.

Cara mengatur radius dan range_filter bervariasi sesuai dengan jenis metrik pencarian. Tabel berikut mencantumkan persyaratan untuk mengatur kedua parameter ini dengan jenis metrik yang berbeda.

Jenis Metrik

Denotasi

Persyaratan untuk Mengatur radius dan range_filter

L2

Jarak L2 yang lebih kecil menunjukkan kemiripan yang lebih tinggi.

Untuk mengabaikan penyematan vektor yang paling mirip, pastikan bahwa

range_filter <= jarak < radius

IP

Jarak IP yang lebih besar menunjukkan kemiripan yang lebih tinggi.

Untuk mengabaikan penyematan vektor yang paling mirip, pastikan bahwa

radius < jarak <= range_filter

COSINE

Jarak COSINE yang lebih besar menunjukkan kemiripan yang lebih tinggi.

Untuk mengabaikan penyematan vektor yang paling mirip, pastikan bahwa

radius < jarak <= range_filter

JACCARD

Jarak Jaccard yang lebih kecil menunjukkan kemiripan yang lebih tinggi.

Untuk mengabaikan penyematan vektor yang paling mirip, pastikan bahwa

range_filter <= jarak < radius

HAMMING

Jarak Hamming yang lebih kecil menunjukkan kemiripan yang lebih tinggi.

Untuk mengabaikan penyematan vektor yang paling mirip, pastikan bahwa

range_filter <= jarak < radius

Contoh

Bagian ini mendemonstrasikan cara melakukan pencarian rentang. Permintaan pencarian dalam cuplikan kode berikut ini tidak membawa jenis metrik, yang menunjukkan jenis metrik default COSINE berlaku. Dalam kasus ini, pastikan bahwa nilai radius lebih kecil dari nilai range_filter.

Pada potongan kode berikut ini, setel radius ke 0.4 dan range_filter ke 0.6 sehingga Milvus mengembalikan semua entitas yang jarak atau nilainya ke vektor kueri berada di antara 0,4 hingga 0,6.

from pymilvus import MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

query_vector = [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]

res = client.search(
    collection_name="my_collection",
    data=[query_vector],
    limit=3,
    search_params={
        # highlight-start
        "params": {
            "radius": 0.4,
            "range_filter": 0.6
        }
        # highlight-end
    }
)

for hits in res:
    print("TopK results:")
    for hit in hits:
        print(hit)

import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
 io.milvus.v2.service.vector.request.SearchReq
import io.milvus.v2.service.vector.request.data.FloatVec;
import io.milvus.v2.service.vector.response.SearchResp


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});
Map<String,Object> extraParams = new HashMap<>();
extraParams.put("radius", 0.4);
extraParams.put("range_filter", 0.6);
SearchReq searchReq = SearchReq.builder()
        .collectionName("range_search_collection")
        .data(Collections.singletonList(queryVector))
        .topK(5)
        .searchParams(extraParams)
        .build();

SearchResp searchResp = client.search(searchReq);

List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
for (List<SearchResp.SearchResult> results : searchResults) {
    System.out.println("TopK results:");
    for (SearchResp.SearchResult result : results) {
        System.out.println(result);
    }
}

// Output
// TopK results:
// SearchResp.SearchResult(entity={}, score=0.5975797, id=4)
// SearchResp.SearchResult(entity={}, score=0.46704385, id=5)

// TODO 

import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";

const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});

var query_vector = [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]

res = await client.search({
    collection_name: "range_search_collection",
    data: [query_vector],
    limit: 5,
    // highlight-start
    params: {
        "radius": 0.4,
        "range_filter": 0.6
    }
    // highlight-end
})

export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"

curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/entities/search" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
    "collectionName": "quick_setup",
    "data": [
        [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]
    ],
    "annsField": "vector",
    "filter": "color like \"red%\" and likes > 50",
    "limit": 3,
    "searchParams": {
        "params": {
            "radius": 0.4,
            "range_filter": 0.6
        }
    }
}'
# {"code":0,"cost":0,"data":[]}

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?