基于Milvus Lite的輕量級向量數據庫實戰指南

一、為什么選擇Milvus Lite?

在人工智能和語義搜索應用中,高效的向量檢索是核心需求。相比需要部署Docker的完整版Milvus,Milvus Lite提供:

  • 零依賴:純Python實現,無需安裝Docker或外部組件

  • 開箱即用:適合快速原型開發和小規模數據場景

  • 全功能支持:完整實現增刪改查、索引和搜索功能

本文將手把手教你在Windows上實現一個圖書推薦系統的向量搜索 demo

二、環境準備

1. 安裝必備庫

bash

pip install pymilvus milvus numpy

💡 注意:Milvus Lite從2.3.0版本開始內置,無需單獨安裝服務端

2. 驗證安裝

python

import milvus
print(milvus.__version__)  # 應輸出 >= 2.3.0

三、實戰:圖書向量搜索引擎

1. 服務啟動與連接

python

from milvus import default_server
from pymilvus import connections# 配置數據存儲路徑(避免使用臨時目錄)
default_server.set_base_dir("milvus_data")  # 啟動服務(默認端口19530)
default_server.start()  # 連接客戶端
connections.connect("default", host="127.0.0.1", port=default_server.listen_port)

關鍵點

  • set_base_dir()?確保數據持久化

  • 生產環境建議設置?set_mem_limit()?限制內存使用


2. 定義數據模型

python

from pymilvus import CollectionSchema, FieldSchema, DataTypefields = [FieldSchema(name="book_id", dtype=DataType.INT64, is_primary=True),FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=200),FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, description="圖書向量數據庫")

字段類型說明

字段類型用途參數示例
INT64主鍵is_primary=True
VARCHAR文本max_length=200
FLOAT_VECTOR向量dim=128

3. 插入測試數據

python

import numpy as npdata = [[0, 1, 2],  # book_id["Python編程", "機器學習實戰", "深度學習入門"],  # titlesnp.random.random((3, 128)).tolist()  # 隨機向量
]collection.insert(data)
collection.flush()  # 確保數據持久化

批量插入優化

python

# 分批次插入大數據量
for i in range(0, len(data[0]), 1000):collection.insert([d[i:i+1000] for d in data])

4. 構建高效索引

python

index_params = {"index_type": "IVF_FLAT","metric_type": "L2","params": {"nlist": 128}
}
collection.create_index("vector", index_params)

索引類型對比

索引類型適用場景特點
IVF_FLAT小規模數據精度高,內存占用低
HNSW大規模數據速度快,但內存消耗大

5. 執行向量搜索

python

# 生成查詢向量
query_vector = np.random.random(128).tolist()# 執行搜索
results = collection.search(data=[query_vector],anns_field="vector",param={"nprobe": 10},limit=3,output_fields=["title"]
)# 打印結果
for hit in results[0]:print(f"書名:{hit.entity.get('title')}, 相似度:{1 - hit.distance:.2f}")

搜索參數解析

  • nprobe:搜索的聚類中心數(值越大精度越高,速度越慢)

  • limit:返回結果數量

  • output_fields:指定返回的附加字段


四、性能優化技巧

1. 內存管理

python

# 啟動時限制內存使用(單位MB)
default_server.set_mem_limit(4096)  # 使用后及時釋放資源
collection.release()

2. 搜索加速

python

search_params = {"params": {"nprobe": 16,  # 擴大搜索范圍"ef": 64       # HNSW專用參數}
}

3. 數據持久化

python

# 手動觸發數據落盤
collection.flush()  # 設置自動刷新間隔(秒)
default_server.set_flush_interval(60)

五、常見問題解答

Q1:搜索時報錯 "collection not loaded"

原因:忘記調用?load()
解決

python

collection.load()  # 顯式加載集合到內存

Q2:插入速度慢

優化方案

  • 批量插入(每次1000條以上)

  • 關閉WAL日志(開發環境):

    python

    default_server.set_wal_enable(False)

Q3:如何實現過濾搜索?

python

# 只搜索book_id>1的記錄
results = collection.search(...,expr="book_id > 1"
)

六、總結

通過本文,你學會了:

  1. Milvus Lite的本地化部署方法

  2. 完整的向量搜索流水線實現

  3. 生產級性能優化技巧

擴展閱讀

  • Milvus官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915517.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915517.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習時代下的社交媒體情感分析:方法、工具與未來挑戰

摘要:基于Yue等學者2019年發表的權威綜述,本文系統總結情感分析的技術框架、實戰資源與前沿方向,附Python代碼示例。 一、情感分析為何重要? 情感分析(Sentiment Analysis)旨在從文本中提取主觀態度&…

Spring Boot 3.0新特性全面解析與實戰應用

Spring Boot 3.0新特性全面解析與實戰應用 引言 Spring Boot 3.0作為Spring生態系統的一個重要里程碑,帶來了眾多令人興奮的新特性和改進。本文將深入解析Spring Boot 3.0的核心變化,并通過實戰示例展示如何在項目中應用這些新特性。 核心變化概覽 Java版…

C# sqlsugar 主子表 聯合顯示 LeftJoin

在C#中使用SqlSugar ORM進行Left Join操作是一種常見需求,尤其是在處理復雜數據庫查詢時。SqlSugar是一個輕量級、高性能的ORM框架,支持多種數據庫。下面是如何使用SqlSugar進行Left Join操作的示例。1. 安裝SqlSugar首先,確保你的項目中已經…

【ROS1】08-ROS通信機制——服務通信

目錄 一、概念 二、何時使用服務 三、話題通信與服務通信的區別 四、案例 4.1 C實現 4.1.1 服務端 4.1.2 客戶端 4.1.3 測試執行 4.2 Python實現 4.2.1 服務端 4.2.2 客戶端 4.2.3 客戶端優化——動態傳參 4.2.4 客戶端優化——等待服務端啟動后再發起請求 一、概…

45.sentinel自定義異常

上文提到Blocked by Sentinel(flow limits) 限流異常,這樣返給用戶就不太友好,所以需要自定義異常。 默認情況下,發生限流、降級、授權攔截時,都會拋出異常到調用方。如果要自定義異常時的返回結果,需要實現BlockExceptionHandler接口: BlockException有很多子類: pac…

f4硬件配置spi

f4型號是stm32f407zgt6用spi來進行MOSI,主機發送從機接收時鐘頻率設置為1MHzMOSI為PC3,SCK為PB10,CS設置為output->PB12時鐘配置如下:波特率計算公式為:128M/(4*Prescaler) 要讓波特率為1M,10…

Redis的持久化-RDB

1.持久化一提到持久化,我們就會第一時間聯想到M有SQL的事務,MySQL事務有四個比較核心的特征:原子性(把多個操作打包成一個整體),一致性(事務執行之前和之后,數據都不能離譜&#xff…

前端內存泄漏

個人簡介 👀個人主頁: 前端雜貨鋪 🙋?♂?學習方向: 主攻前端方向,正逐漸往全干發展 📃個人狀態: 研發工程師,現效力于中國工業軟件事業 🚀人生格言: 積跬步…

部署zabbox企業級分布式監控

目錄 一、監控系統的基礎認知 2.1 監控的定義與核心價值 2.2 監控的五大類型與五層邏輯架構 (1)五大監控類型 (2)五層邏輯架構 2.3 主流開源監控產品對比 二、Zabbix 系統深度解析 3.1 Zabbix 的定位與發展歷程 3.2 Zabb…

時空數據可視化新范式:基于Three.js的生產全流程時間軸回溯技術解析

內容摘要在現代工業生產中,如何高效地管理和分析生產全流程數據是一個關鍵問題。傳統的數據可視化方法往往只能展示靜態的數據快照,難以捕捉和回溯生產過程中的動態變化。然而,基于 Three.js 的時間軸回溯技術為這一難題提供了一種全新的解決…

寶塔面板Nginx報錯: IP+端口可以直接從訪問,反向代理之后就504了 Gateway Time-out

原因表示代理服務器在等待上游服務器&#xff08;即后端服務&#xff09;響應時超時 &#xff1a;<html><head><title>504 Gateway Time-out</title> </head><body><center><h1>504 Gateway Time-out</h1></center&g…

【ComfyUI學習筆記01】下載安裝 | 運行第一個工作流 | 學習思路

【ComfyUI學習筆記01】下載安裝 | 運行第一個工作流 | 學習思路前言下載安裝ComfyUI的下載和安裝ComfyUI Manager 的下載和安裝運行第一個工作流初識節點 (Nodes) 工作流案例1 Image Generation繪制流程圖&#xff0c;確定關鍵節點放置關鍵節點&#xff0c;確定連接順序補充中間…

numpy庫的基礎知識

一.numpy是什么 &#xff1f;Numpy 是 Python 中專門用于高性能數值計算的庫&#xff0c;其核心是一個功能強大的 n 維數組對象&#xff08;ndarray&#xff09;&#xff0c;可以用來存儲和操作大規模的數字矩陣或張量數據。numpy庫的作用&#xff1a;核心功能&#xff1a;實現…

在UniApp中防止頁面上下拖動的方法

1、pages.json中在某個頁面設置禁用彈性滾動的頁面 {"path": "pages/yourPage/yourPage","style": {"app-plus": {"bounce": "none"}} } 2、 pages.json中在所有頁面設置禁用彈性滾動的頁面 {"globalStyl…

LinkedList的模擬實現(雙向鏈表Java)

一&#xff1a;結構LinkedList的底層是雙向鏈表結構(鏈表后面介紹)&#xff0c;由于鏈表沒有將元素存儲在連續的空間中&#xff0c;元素存儲在單獨的節點中&#xff0c;然后通過引用將節點連接起來了&#xff0c;因此在在任意位置插入或者刪除元素時&#xff0c;不需要搬移元素…

Shopify 知識點

&#x1f4dc; 一、Liquid模板語言&#xff08;核心基礎&#xff09;語法結構 ? 輸出變量&#xff1a;{{ product.title }} 動態顯示商品標題。 ? 邏輯控制&#xff1a;{% if product.available %}…{% endif %} 條件渲染。 ? 循環遍歷&#xff1a;{% for item in collectio…

Web LLM 安全剖析:以間接提示注入為核心的攻擊案例與防御體系

文章目錄1 間接提示注入2 訓練數據中毒為什么會出現這種漏洞&#xff1f;3 泄露敏感訓練數據攻擊者如何通過提示注入獲取敏感數據&#xff1f;為什么會出現這種泄露&#xff1f;4 漏洞案例間接提示注入利用 LLM 中的不安全輸出處理5 防御 LLM 攻擊把LLM能訪問的API當成“公開接…

ElasticSearch:不停機更新索引類型(未驗證)

文章目錄**一、前期準備****1. 集群健康檢查****2. 備份數據****3. 監控系統準備****二、創建新索引并配置****1. 設計新索引映射****2. 創建讀寫別名****三、全量數據遷移****1. 執行初始 Reindex****2. 監控 Reindex 進度****四、增量數據同步****1. 方案選擇****五、雙寫切換…

python學智能算法(二十七)|SVM-拉格朗日函數求解上

【1】引言 前序學習進程中&#xff0c;我們已經掌握了支持向量機算法中&#xff0c;為尋找最佳分割超平面&#xff0c;如何用向量表達超平面方程&#xff0c;如何為超平面方程建立拉格朗日函數。 本篇文章的學習目標是&#xff1a;求解SVM拉格朗日函數。 【2】求解方法 【2.…

mac安裝node的步驟

適用于macOS 10.15及以上版本。 前提條件 macOS版本&#xff1a;確保系統為macOS 10.15&#xff08;Catalina&#xff09;或更高版本。可在“蘋果菜單 > 關于本機”查看。管理員權限&#xff1a;部分安裝可能需要管理員權限。網絡連接&#xff1a;需要聯網下載安裝包或工具…