milvus 向量搜尋

2021-10-24 04:31:15 字數 1911 閱讀 1685

milvus儲存向量化的文字,可以快速查詢top-n條相似記錄。

milvus安裝使用中的一些坑,參考:

在linux上採用docker安裝milvus更簡單,參見:

連線milvus

milvus = milvus(ip, hort)
建立、刪除表,判斷表是否存在

當向量資料不斷匯入時,milvus 會把資料增量式地合併成檔案,當某個檔案達到 index_file_size 所設定的值之後,該檔案就不再接受新的資料,milvus 會把新的資料存成另外乙個檔案。

milvus 在進行搜尋時,是依次對每個索引檔案進行搜尋。當 index_file_size 從1024改為2048時,搜尋效能約提公升30%~50%。但該值設的過大,有可能導致大檔案無法載入進記憶體。常用的 index_file_size 為1024mb和2048mb。

status, ok = milvus.has_collection(collection_name)

param =

milvus.create_collection(param)

milvus.drop_collection(collection_name)

向量歸一化

只有當資料做過歸一化,metric_typel2ip計算的向量相似度結果才會等價

def

normaliz_data

(vec_list)

:"""

巢狀列表的資料歸一化

:param vec_list:

:return:

"""for i in

range

(len

(vec_list)):

vec = vec_list[i]

square_sum =

reduce

(lambda x, y: x + y,

map(

lambda x: x * x, vec)

) sqrt_square_sum = np.sqrt(square_sum)

coef =

1/ sqrt_square_sum

vec =

list

(map

(lambda x: x * coef, vec)

) vec_list[i]

= vec

return vec_list

插入向量

ids只能接受int資料

status, ids = milvus.insert(collection_name=collection_name,

records=insert_vectors,

ids=ids_list)

top-n相似查詢

n ≤ 20時,params引數不用配置

search_param =

status, results = milvus.search(collection_name=collection_name,

query_records=vector_list,

top_k=query_top, params=search_param)

for p, re in

enumerate

(results[0]

):temp_dict =

temp_dict[

"id"

]= re.

id temp_dict[

"similarity"

]= re.distance

milvus高可用搭建

基於keepalived部署milvus高可用問題 雙寫冷備 兩個寫節點不能同時啟動,否則會導致資料重複,通過增加與閘道器的連通性來解決可能同時啟動的問題,但不能完全保證沒有特殊情況的存在。另外宕機時可能會導致資料丟失。一寫一讀 可以同時啟動,但是寫節點宕機時,資料不能寫入。基於minio的共享儲存...

向量裁剪向量

也不知道為啥,向量裁剪向量這麼普通的東西這麼難找,趕緊放出來讓大家用用 import os import numpy as np import geopandas as gpd import warnings warnings.filterwarnings ignore geoseries.notn...

建表字段不能重複 Milvus 資料段合併機制

我們在 milvus在大規模向量檢索場景下的資料管理 這篇文章的第 二 章第 2 小節說過,當向量資料不斷地進入milvus時,系統後台會持續地將插入緩衝區中的資料寫入磁碟,形成很多小檔案。我們稱這些檔案為資料段。大量零碎的資料段有兩個明顯缺點 因此milvus後台落盤任務會不斷地把這些小資料段合併...