瘋狂SQL轉換系列- SQL for Milvs2.4

????????鑒于Milvus仍在不停的迭代新版本,推出新功能,其SDK目前并不穩定。目前其2.4版本的SDK接口已與之前的2.2版本有了較大的差別,功能上也有了一定的調整。為此,我們重新提供了針對[Milvus2.4](https://github.com/colorknight/moql-transx/tree/master/moql-querier-milvus2.4)版本的語法轉換功能。由于Milvus文檔有些內容寫的不是特別詳實,亦或時間倉促,我們沒有正確理解其功能含義,轉換工作可能存在一些問題,還請發現問題的朋友多多指出。

? ? ? ?我們選擇Milvus2.4版本進行語法支持的主要原因是,2.4版本是Milvus目前最新的版本,該版本引入了可以建立多個向量索引的能力。在微軟推出的GraphRAG技術中,用到了多向量檢索的技術,而Milvus2.2版只支持單向量,無法復刻GraphRAG的技術理念。為此,我們選中了2.4版本進行語法支持。對于未來Milvus版本發生改變,我們是否能及時支持,主要取決于我們在HuggingFists項目中是否會用到這樣的技術特性。本次升級的主要動力來自于我們希望使用HuggingFists采用低代碼方式來實踐GraphRAG項目中的技術理念。當然,如果有朋友對未來某個版本有語法轉換需求也可以給我們提出需求,我們會盡量滿足。?

????????言歸正傳,為了能讓使用者以類似訪問關系數據庫的交互體驗訪問Milvus向量數據庫。MOQL Transx繼續秉承能SQL化檢索數據庫就SQL化檢索數據庫的宗旨。為用戶提供了一套可以檢索Milvus2.4向量數據庫的SQL語法,并提供了檢索接口。使用者可通過該接口輸入SQL語句,獲得結構化的數據結果,如下列代碼示例:

// 構建Milvus客戶端
String url = String.format("%s://%s:%d", "http" ,"datayoo05", 19530);
ConnectConfig connectConfig = ConnectConfig.builder().uri(url).build();
milvusClient = new MilvusClientV2(connectConfig);
// 裝載Collection
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder().collectionName("hybrid_search_collection").build();
milvusClient.loadCollection(loadCollectionReq);
// 使用Milvus客戶端創建Milvus查詢器
MilvusQuerier milvusQuerier = new MilvusQuerier(milvusClient);
String sql = "select * from hybrid_search_collection a, "
// 用子檢索語句檢索向量字段
+ "(select * from hybrid_search_collection where vmatch(dense, 'L2', '[[1.0, 2.0, 3.0],[1.1,2.1,3.1]]')) b, "
// 用子檢索語句檢索稀疏向量
+ "(select * from hybrid_search_collection where vmatch(sparse, 'IP', '[{\"2\":0.1764169}, {\"5\":0.1764169}]')) c limit 5";
// 檢索Collection
RecordSet recordSet = milvusQuerier.query(sql);

????????Milvus2.4的SDK相較Milvus2.2有了不少改變,主要是方法參數上的變動比較大。比如Milvus2.2中SearchParam在Milvus2.4中變成了SearchReq。但SDK的整體思路沒有太大的變化,我們在這里就不再贅述了。下表將給出Milvus2.4查詢接口的參數與SQL語法的對照關系,其中的粗體為Milvus2.4新增的檢索能力,刪除線標記的語法部分在Milvus2.2中有效,由于未在2.4的文檔中找到相應的說明,故標為刪除:

Milvus查詢參數接口SQL語法
collectionName(table)from table
outFields(outFields)select outFields
filter(expr)where expr
annsField, params:metric_type, datavMatch(fieldName, metricType, vectors)
consistencyLevelconsistencyLevel(['STRONG'|'BOUNDED'|'Eventually'])
topK(k)limit offset, k
offset(o)limit offset, k
params:nProbenProbe(long)
params:efef(long)
params:search_ksearchK(long)
partitionNamespartitionBy(String[])
roundDecimalroundDecimal(int)
travelTimestamptravelTimestamp(long)
guaranteeTimestampguaranteeTimestamp(long)
rangesearchRange(metricType, radius, rangeFilter)
groupgroup by fieldName
dropRatiodropRatioSearch(dropRatio)
searchRequestsfrom table, [queryExpression]{0,10}
rankerrrfRanker(k), weightedRanker(float[])

( 注:queryExpression是一個表示向量檢索的子SQL語句)

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

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

相關文章

售后板子HDMI無輸出分析

問題: 某產品售后有1例HDMI無輸出。 分析: 1、測試HDMI的HPD腳(HDMI座子的19pin),測試電壓4.5V,屬于正常。 2、用萬用表直流電壓檔,測試HDMI的3對數據腳和1對時鐘腳(板子通過HDM…

【聲音轉文字CapsWriter】聲音隨時轉化為文字,CapsWriter提高工作效率

文章目錄 前言1. 軟件與模型下載2. 本地使用測試3. 異地遠程使用3.1 內網穿透工具下載安裝3.2 配置公網地址3.3 修改config文件3.4 異地遠程訪問服務端 4. 配置固定公網地址4.1 修改config文件 5. 固定tcp公網地址遠程訪問服務端 前言 今天我要給大家安利一個神器——CapsWrit…

使用 Python 編程語言來實現機器學習小項目教程案例

以下是一個簡單的機器學習小項目教程案例,使用 Python 編程語言和 Scikit-learn 庫來實現一個分類任務。我們將使用經典的鳶尾花(Iris)數據集來訓練一個分類器,預測鳶尾花的種類。 項目目標 使用機器學習算法對鳶尾花數據集進行分類,預測鳶尾花的類別(Setosa、Versicolor…

DKG(Distributed Key Generation)協議

一、DKG是什么 DKG(分布式密鑰生成)提供了一種去中心化的方法,使各個參與方在不相互信任的情況下生成共享密鑰,以確保安全通信和多方參與的機密性。 DKG技術的關鍵思想是使用多方計算(secure multiparty computation)和秘鑰共享(secret sharing)的概念。 秘鑰共享 則…

十二、Docker Compose 部署 SpringCloudAlibaba 微服務

一、部署基礎服務 0、項目部署結構 項目目錄結構如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…

使用 Docker(Podman) 部署 MongoDB 數據庫及使用詳解

在現代開發環境中,容器化技術(如 Docker 和 Podman)已成為部署和管理應用程序的標準方式。本文將詳細介紹如何使用 Podman/Docker 部署 MongoDB 數據庫,并確保其他應用程序容器能夠通過 Docker 網絡成功連接到 MongoDB。我們將逐步…

Games104——游戲引擎Gameplay玩法系統:基礎AI

這里寫目錄標題 尋路/導航系統NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh(尋路網格)Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star(A*算法) Path Smoothing Steering系統Crowd Simu…

Win11非虛擬機安裝ISE14.7

官網下載6.18GB 的 Full Installer for Windows 7/XP/Server解壓后運行安裝程序不勾選Enable WebTalk to send software, IP ...安裝程序卡死在ISE:Configure WebTalk,此時打開任務管理器,在詳情中找到xwebtalk,右鍵結束任務。安裝程序繼續進…

從0開始達芬奇(3.8)

剪視頻有主次之分,主就是Aroll,次就是Broll。 智能媒體夾: 媒體池的智能媒體夾部分可以很好區分主次。這個相當于智能搜索,當有大量的素材時,可以為這些素材標明信息,下次使用不需要反復看,直…

【Elasticsearch】parent aggregation

在Elasticsearch中,Parent Aggregation是一種特殊的單桶聚合,用于選擇具有指定類型的父文檔,這些類型是通過一個join字段定義的。以下是關于Parent Aggregation的詳細介紹: 1.基本概念 Parent Aggregation是一種聚合操作&#x…

自學Java-面向對象編程入門

自學Java-面向對象編程入門 一、靜態方法的注意事項二、簡易版電影信息展示系統1、測試類2、電影類3、電影操作類 一、靜態方法的注意事項 1、靜態方法中可以直接訪問靜態成員,不可以直接訪問實例成員 2、實例方法中既可以直接訪問靜態成員,也可以直接訪…

python算法和數據結構刷題[3]:哈希表、滑動窗口、雙指針、回溯算法、貪心算法

回溯算法 「所有可能的結果」,而不是「結果的個數」,一般情況下,我們就知道需要暴力搜索所有的可行解了,可以用「回溯法」。 回溯算法關鍵在于:不合適就退回上一步。在回溯算法中,遞歸用于深入到所有可能的分支&…

【自學筆記】Python的基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 Python基礎知識總覽1. Python簡介2. 安裝與環境配置3. 基本語法3.1 變量與數據類型3.2 控制結構3.3 函數與模塊3.4 文件操作 4. 面向對象編程(OOP&#…

文件上傳到騰訊云存儲、簽名及設置過期時間

將文件上傳到騰訊云對象存儲(COS,Cloud Object Storage)可以通過騰訊云提供的 SDK 實現。以下是詳細的步驟和示例代碼,幫助您完成文件上傳操作。 步驟 注冊騰訊云賬號并創建存儲桶: (1)登錄騰訊…

基于Java(SpringBoot)+MySQL+Vue實現的平行志愿錄取系統

基于spring bootvue實現的平行志愿錄取系統 1.項目簡介 這兩天干上高考出成績,有不少親戚家的孩子今年高考,和我詢問關于報志愿的問題。老家河北今年是采用所謂的平行志愿。我看了很多的資料才明白什么叫所謂的“平行志愿”。 整個流程好像很是復雜。…

chrome瀏覽器chromedriver下載

chromedriver 下載地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的鏈接有和當前發布的chrome瀏覽器版本相近的chromedriver 實際使用感受 chrome瀏覽器會自動更新,可以去下載最新的chromedriver使用,自動化中使用新的chromedr…

Redis常見數據類型與編碼方式

??前言?? 本小節圍繞Redis中常見的數據類型與編碼方式展開。 🍉歡迎點贊 👍 收藏 ?留言評論 🍉博主將持續更新學習記錄收獲,友友們有任何問題可以在評論區留言 🍉博客中涉及源碼及博主日常練習代碼均已上傳GitHu…

win編譯openssl

一、perl執行腳本 1、安裝perl腳本 perl安裝 2、配置perl腳本 perl Configure VC-WIN32 no-asm no-shared --prefixE:\openssl-x.x.x\install二、編譯openssl 1、使用vs工具編譯nmake 如果使用命令行nmake編譯會提示“無法打開包括文件: “limits.h”“ 等錯誤信息 所以…

【Kubernetes Pod間通信-第2篇】使用BGP實現Pod到Pod的通信

Kubernetes中Pod間的通信 本系列文章共3篇: 【Kubernetes Pod間通信-第1篇】在單個子網中使用underlay網絡實現Pod到Pod的通信【Kubernetes Pod間通信-第2篇】使用BGP實現Pod到Pod的通信(本文介紹)【Kubernetes Pod間通信-第3篇】Kubernetes中Pod與ClusterIP服務之間的通信…

< 自用文兒 > 下載 MaxMind GeoIP Databases 對攻擊的 IP 做 地理分析

起因 兩個 VPM/VPS,安裝了 fail2ban 去攔截密碼窮舉攻擊。每天的記錄都在增長,以前復制屏幕輸出就行,一屏的內容還容易粘貼出來的。昨天已經過 500 條,好奇 fail2ban 是如何存儲這些內容的?就發現它在使用 SQLite3 數…