milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?

ponponon發表於2023-04-26

Q:milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?
A:歸一化之後,最大值是4

Q:歸一化的是怎麼操作的?呼叫 collection.search 之後獲得的向量,已經是歸一化了嗎?還是需要自己對 milvus 的搜尋結果再做歸一化?

A:需要自己的對向量做歸一化

Q:有樣例程式碼嗎
A:可以用np.linalg.norm

Q:歸一化是查詢之前做,還是獲取查詢結果後,對距離做歸一化?
A:查詢之前做,查詢的向量,和入底庫的向量,都需要做歸一化


import numpy as np
import milvus

# 連線 Milvus 伺服器
client = milvus.Milvus(host='localhost', port='19530')

# 定義查詢向量
query_vector = np.array([0.1, 0.2, 0.3, 0.4, 0.5], dtype=np.float32)

# 查詢向量歸一化
query_vector_norm = query_vector / np.linalg.norm(query_vector)

# 構建查詢引數
search_param = {
    "metric_type": "L2",
    "params": {"nprobe": 16}
}

# 在 milvus 中查詢向量
search_result = client.search(collection_name='my_collection', query_records=[query_vector_norm.tolist()], top_k=10, params=search_param)

# 處理查詢結果
for result in search_result:
    print(result.id, result.distance)

相關文章