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_type
的l2
和ip
計算的向量相似度結果才會等價
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後台落盤任務會不斷地把這些小資料段合併...