跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

簡介向量資料庫與搜尋技術的演進
  • 卷期:v0077
  • 出版日期:2025-06-20

作者:林詩芳 / 臺灣大學計算機及資訊網路中心程式設計組行政專員


        隨著人工智慧(Artificial Intelligence,AI)和機器學習(Machine Learning)的普及,語意搜尋與推薦系統成為熱門應用,而向量資料庫正是這些技術的核心基礎。傳統資料庫在高維度向量檢索上表現不佳,因此專用向量資料庫與混合搜尋(Hybrid Search)技術應運而生。透過結合向量搜尋、關鍵字搜尋與結構化過濾,混合搜尋能提供更精準、更智慧的檢索體驗,並引領未來多模態資料處理的新趨勢。

 

        近年來因為人工智慧(AI)與機器學習的興起,並發展出許多應用如語意搜尋,推薦系統,聊天機器人等等。AI的運算與判斷依賴向量化(Vectorization)的資料結構[1]。將結構化資料或非結構化資料(文字,圖片,或音訊等)透過嵌入模型(Embedding Model)轉成由數值組成的向量(Vector)的過程稱為嵌入(Embedding)。這些向量能夠保留資料的語意或特徵,而後進一步用向量搜尋引擎去做向量相似度比較或搜尋。

        傳統關聯式資料庫(Relational Database Management System,RDBMS)擅長處理結構化資料(表格),採用結構化查詢語言(Structured Query Language,SQL)方式查詢並透過B-Tree Index,Clustered Index,Non-Clustered Index等方式建立資料庫索引(Database Indexing)來加速查詢[2]。但不適合高維度向量的相似度搜尋。

        向量資料庫(Vector Database)是一種儲存、管理和檢索高維度向量資料的資料庫系統。向量資料庫透過向量索引(Vector Index)實現高效向量搜尋(Vector Search) [3][4][5]。該索引將向量依據特定演算法組織成資料結構,如樹(Tree,例:KD-Tree)、圖(Graph,例:HNSW,Hierarchical Navigable Small World Graph)、分桶(Bucket,例:IVF,Inverted File Index)等,以支援近似最近鄰搜尋(Approximate Nearest Neighbor, ANN)[6]。這些索引結構是ANN演算法的核心,使能實現在高維度向量資料中用索引結構快速找到候選集合而達到加速縮小搜尋範圍。把欲查詢的資料亦透過相同嵌入模型轉成向量後,使用相似度測量(Similarity Metric,例:Cosine Similarity,Euclidean Distance,Inner Product)與儲存在向量資料庫中的向量計算候選集合的精確距離或相似度,在排序結果取Top-K進而找出最相關的向量。

        向量搜尋能夠找到語意相關但字面不同的內容這和傳統關鍵字搜尋(Keyword Search),其基於字詞匹配(Keyword Matching)有很大的不同[7]。例如:關鍵字搜尋「人事系統」,其結果只會包含「人事系統」的結果,但向量搜尋搜尋「人事系統」,其結果會包含「人事系統」,「差勤系統」等語意相關的結果。向量搜尋因對同義詞及語意理解增加,多語言支持,因此語意相關性提升。即使沒有完全匹配的字詞,只要語意相近,結果仍會被檢索出來。

        最早出現專門為AI應用設計且支援分散式架構的向量資料庫產品是Milvus(2019)。而後出現更多專用向量資料庫(Vector Database),例如:Weaviate、Pinecone、Qdrant、LanceDB。傳統關聯式資料庫(RDBMS)通常具備的完整ACID支援,其中原子性(A,Atomicity):一個交易中的所有操作要麼全部成功,要麼全部失敗。一致性(C,Consistency):交易完成後,資料庫必須從一個一致狀態轉換到另一個一致狀態。隔離性(I,Isolation):多個交易同時執行時,彼此不會互相干擾。持久性(D,Durability):一旦交易提交,資料就會永久保存在儲存系統中,即使系統崩潰也能恢復。傳統關聯式資料庫亦支援原地更新(in-place-update),在資料儲存位置不變的情況下,直接修改該位置的內容,而不需要刪除並重新插入資料[8]。然而向量資料庫更新資料的方式,通常依賴API或SDK,而不是結構化查詢語言(SQL)。原地更新在傳統資料庫很常見,但在向量資料庫或搜尋引擎中,不一定支援,因為索引結構複雜。向量資料庫更新向量索引方式,採刪除加插入(Delete + Insert),先刪除舊資料,再插入新資料,導致向量索引或位置可能改變。 若大量更新需要重新建立Embedding向量索引。有些向量資料庫支援原地更新的方式,如更新或插入(Upsert),如果向量索引ID已存在,會覆蓋舊向量;如果不存在則新增。然而大量刪除或更新會造成原索引結構碎片化,檢索效能下降,此時需重建向量索引(Vector Index Rebuild),重新生成ANN索引結構,以維持檢索效能。

 

        進一步為了提升搜尋結果的關聯性與精確度而產生混合查詢(Hybrid Search),它透過結合多種搜尋演算法的技術,如向量搜尋,關鍵字搜尋與結構化過濾,其常見的實現方法包括:

  • 多模態混合搜尋(Multimodal Search)
    • 結合不同資料型態如文字、圖片、音訊等資訊轉成統一的嵌入向量後進行向量檢索,語意搜尋。例如::Milvus。

 

  • 向量搜尋(Vector Search)+關鍵字搜尋(Keyword Search)
    • 結合向量搜尋與傳統關鍵字搜尋,結合策略一是先用關鍵字搜尋過濾出候選集後進行向量搜尋。策略二是同時執行關鍵字搜尋與向量搜尋,對兩者結果進行加權或排序融合。例如::Weaviate。

 

  • 向量搜尋(Vector Search)+ 基於DSL的過濾(DSL Based Metadata Filtering)
    • 越來越多向量資料庫中的每個向量不只是數值陣列,還支援附加資訊為「元資料」(Metadata/Payload),其用來描述該向量所代表的實體。[9] 其結合策略方式一是做檢索前過濾(Pre-filtering),先根據元資料過濾候選集合,再對其做向量搜尋,此方法適合縮小搜尋範圍,提升效能。策略二是檢索後過濾(Post-filtering),先對整個資料集做向量搜尋後再進行元資料過濾。策略三是同時進行向量搜尋與元資料過濾後對結果進行加權排序。 此搜尋過濾方式透過API 或領域特定語言(Domain-Specific Language,DSL)查詢[10]。[10] 但因為DSL缺乏複雜JOIN與交易控制,所以此類整合搜尋仍不易進行複雜的查詢,亦無ACID支援。例如::Qdrant。

 

  • 向量搜尋(Vector Search)+ 基於SQL的過濾(SQL-Based Metadata Filtering) 其整合實現方式可分:
    • 雙資料庫模式:資料分散在關聯式資料庫(RDBMS)與向量資料庫(Vector DB),其應用層主流順序是先用SQL從關聯式資料庫過濾候選集合後再去向量資料庫做相似度排序,合併結果回傳。 例如 PostgreSQL + Milvus。
    • 單一資料庫模式:單一資料庫中同時存放向量資料與結構化資料,在同個資料庫同時做SQL查詢與向量檢索,其可分成以下類型:
      • 向量資料庫擴充支援結構化查詢,以LanceDB為例,為了支援類SQL查詢,其資料儲存格式採用Apache Arrow和整合了DataFusion這類查詢引擎。但並不是ANSI SQL。
      • 關聯資料庫擴充支援向量資料型別,資料庫具原生VECTOR(n)資料型別可在表格欄位存放維度向量,內部以二進位儲存,對外可視為JSON陣列,同時支持T‑SQL函數進行向量搜尋。此類型優點是可進行複雜的SQL查詢,並處理向量資料時仍保有ACID支援。但在高維度向量或大規模資料下效能不如專用向量資料庫,例如:PostgreSQL+ pgvector、SQL Server 2025。
  • 向量搜尋(Vector Search)+ 基於DSL的過濾(DSL Based Metadata Filtering) +關鍵字搜尋(Keyword Search) 同時結合向量搜尋,關鍵字搜尋與元資料過濾,其實現方式如下 
    • 雙資料庫模式:透過整合串接向量資料庫及搜尋引擎來實現。例如:Qdrant + MongoDB。
    • 單一資料庫模式:以Elasticsearch(8.x後)為例,其是全文檢索分散式搜尋引擎擴充支援向量搜尋,其是文件導向且每一筆資料是採JSON格式儲存資料,可同時提供關鍵字搜尋、向量相似度比對與結構化過濾。Elasticsearch的向量搜尋目前主要支援dense_vector,並採用HNSW作為近似最近(ANN)演算法,適合百萬級資料,但在億級以上會遇到效能瓶頸。其搜尋語法如圖一。

 

20260620_007705_01

圖一:Elasticsearch DSL搜尋語法

 

  • 向量搜尋(Vector Search) +基於SQL的過濾(SQL-Based Metadata Filtering) +關鍵字搜尋(Keyword Search)

同時結合向量搜尋,關鍵字搜尋與基於SQL的過濾,其實現方式:

  • 多資料庫模式:透過整合串接關聯式資料庫(RDBMS)與向量資料庫(Vector DB)及搜尋引擎來實現。例如:PostgreSQL + Milvus + Elasticsearch。
  • 單一資料庫模式:以SQL Server2025為例,其亦可結合向量搜尋,關鍵字搜尋與結構化過濾,其向量索引技術採DiskANN作為近似最近(ANN)演算法。但在高維度或大規模資料下效能下降,索引建立與查詢延遲會顯著增加。其搜尋語法如圖二。

 

20260620_007705_02

圖二:SQL Server 2025搜尋語法

 

隨著向量資料庫與傳統搜尋技術的深度融合,未來混合搜尋將成為處理多模態資料與大規模檢索的核心技術,並持續推動智慧搜尋的發展。

 

Reference:

[1] https://en.wikipedia.org/wiki/Vectorization_(mathematics)

[2] https://en.wikipedia.org/wiki/Database_index

[3] https://en.wikipedia.org/wiki/Vector_database

[4] https://docs.weaviate.io/weaviate/concepts/vector-index

[5] https://www.ibm.com/think/topics/vector-search

[6] https://en.wikipedia.org/wiki/Nearest_neighbor_search

[7] https://en.wikipedia.org/wiki/Keyword_research

[8] https://en.wikipedia.org/wiki/ACID

[9] https://en.wikipedia.org/wiki/Metadata

[10] https://en.wikipedia.org/wiki/Domain-specific_language