整合 Milvus 與 MindsDB
MindsDB是一種功能強大的工具,可將 AI 應用程式與多種企業資料來源相整合。它可作為一個聯合查詢引擎,在仔細回答結構化和非結構化資料查詢的同時,為分散的資料帶來秩序。無論您的資料是否分散在 SaaS 應用程式、資料庫或資料倉庫中,MindsDB 都能使用標準 SQL 連接並查詢所有資料。它通過知識庫提供最先進的自主 RAG 系統,支持數百個數據源,並提供從本地開發到雲環境的靈活部署選項。
本教學示範了如何將Milvus與MindsDB整合,通過類似SQL的操作來管理和查詢向量嵌入,使您能夠利用MindsDB的AI功能和Milvus的向量資料庫功能。
本教學主要參考MindsDB Milvus Handler的官方文檔。如果您在本教程中發現任何過時的部分,可以優先按照官方文檔進行,並為我們創建一個問題。
安裝MindsDB
在我們開始之前,通過Docker或Docker Desktop在本地安裝MindsDB。
在繼續之前,請確保您對MindsDB和Milvus的基本概念和操作都有扎實的理解。
參數介紹
建立連接所需的參數如下
urimilvus資料庫的uri,可以設置為本機的".db "文件或docker或雲端服務。token: 令牌,根據 uri 選項來支援 docker 或雲端服務。
建立連線的可選參數有
這些用於SELECT 查詢:
search_default_limit:在 select 語句中傳遞的預設限制 (default=100)search_metric_type:用於搜尋的度量類型 (預設="L2")search_ignore_growing:相似性搜尋時是否忽略成長中的區段 (預設值=False)search_params:特定於search_metric_type(default={"nprobe": 10})
這些用於CREATE 查詢:
create_auto_id:插入沒有 ID 的記錄時,是否自動產生 ID (預設值=False)create_id_max_len在建立資料表時,id 欄位的最大長度 (default=64)create_embedding_dim:創建表時的嵌入維度 (預設值=8)create_dynamic_field:建立的資料表是否有動態欄位 (預設值=True)create_content_max_len:內容欄的最大長度 (預設值=200)create_content_default_value:內容欄的預設值 (default='')create_schema_description模式的描述 (default='')create_alias模式的別名 (default='default')create_index_params: 在 embeddings 列上建立索引的參數 (default={})create_index_metric_type: 用於創建索引的度量 (default='L2')create_index_type索引類型 (default='AUTOINDEX')
使用方法
繼續之前,請確認pymilvus 版本與此pinned 版本相同。如果您發現任何版本相容性問題,您可以回滾您的 pymilvus 版本,或在此需求檔案中自訂。
建立連線
為了使用此處理器並連接到MindsDB中的Milvus伺服器,可以使用以下語法:
CREATE DATABASE milvus_datasource
WITH
ENGINE = 'milvus',
PARAMETERS = {
"uri": "./milvus_local.db",
"token": "",
"create_embedding_dim": 3,
"create_auto_id": true
};
- 如果你只需要一個本地的向量資料庫來進行小規模的數據或原型設計,將uri設置為一個本地文件,例如:
./milvus.db,是最方便的方法,因為它會自動利用Milvus Lite將所有數據存儲在這個文件中。- 對於生產中較大規模的資料和流量,您可以在Docker 或 Kubernetes 上架設 Milvus 伺服器。在此設定中,請使用伺服器位址和連接埠作為您的
uri,例如http://localhost:19530。如果您啟用 Milvus 的驗證功能,請將token設定為"<your_username>:<your_password>",否則不需要設定令牌。- 您也可以在Zilliz Cloud 上使用完全管理的 Milvus。只需將
uri和token設定為 Zilliz Cloud 實例的公共端點和 API 金鑰。
放棄連線
若要放棄連線,請使用此指令
DROP DATABASE milvus_datasource;
建立表格
若要從預先存在的資料表插入資料,請使用CREATE
CREATE TABLE milvus_datasource.test
(SELECT * FROM sqlitedb.test);
丟棄集合
不支援刪除集合
查詢和選擇
要使用搜尋向量查詢資料庫,可以在WHERE 子句中使用search_vector
注意事項:
- 如果省略
LIMIT,會使用search_default_limit,因為 Milvus 需要它 - 不支援 Metadata 欄位,但如果資料集已啟用動態模式,您可以像平常一樣查詢,請參閱下面的範例
- 動態欄位無法顯示,但可以查詢
SELECT * from milvus_datasource.test
WHERE search_vector = '[3.0, 1.0, 2.0, 4.5]'
LIMIT 10;
如果您省略search_vector ,這會變成基本搜尋,並傳送LIMIT 或search_default_limit 資料集中的項目數量。
SELECT * from milvus_datasource.test
您可以在動態欄位上使用WHERE 子句,就像一般的 SQL。
SELECT * FROM milvus_datasource.createtest
WHERE category = "science";
刪除記錄
您可以使用DELETE 刪除詞條,就像在 SQL 中一樣。
注意事項:
- Milvus 只支援刪除具有明確指定主鍵的實體。
- 只能使用
IN運算符
DELETE FROM milvus_datasource.test
WHERE id IN (1, 2, 3);
插入記錄
您也可以像這樣插入單獨的記錄:
INSERT INTO milvus_test.testable (id,content,metadata,embeddings)
VALUES ("id3", 'this is a test', '{"test": "test"}', '[1.0, 8.0, 9.0]');
更新
Milvus API 不支援更新記錄。您可以嘗試使用DELETE 和INSERT
更多的細節和例子,請參考MindsDB官方文檔。