為滿足更加多元化和複雜的業務情境,OpenSearch推出了向量檢索功能。在特定業務情境下,特別是在教育搜題和圖片搜尋情境中,結合多路搜尋功能可以顯著提升搜尋結果的準確性。本文將對向量索引的文法說明及其注意事項進行詳細介紹。
文法說明
query = vector_index:'向量'&vector_search={"vector_index":{"namespaces":[],"threshold":0.5,"top_n":10,"search_params":{}}}
其中vector_search為選擇性參數,用於向量索引查詢配置。整體是一個字典格式,key為查詢的向量索引,value為具體的查詢配置。value常用配置項包括:
|
參數名 |
類型 |
預設值 |
說明 |
|
namespaces |
list<string> |
通過命名空間將向量索引進行分區,查詢請求可被限制在索引的不同分區中;命名空間數不建議超過10000個;配置了命名空間後,查詢時必須指定命名空間。 |
|
|
threshold |
float |
向量召回最低分閾值。 |
|
|
top_n |
uint32 |
向量召回topN。 |
|
|
search_params.qc_scan_ratio |
float |
0.01 |
QC索引查詢時掃描文檔數量比例,掃描的文檔數=總文檔數 * scan_ratio |
|
search_params.hnsw_ef |
uint32 |
500 |
HNSW索引查詢時掃描的文檔數,值越大,召回率越高,相應耗時越大。 |
vector_search參數在多路召回情境同樣有效。
樣本:查詢64維的向量索引
vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'
使用樣本
設定最低分閾值
功能說明:控制向量分值低於某個閾值時,不參與召回。
舊版參數格式:&sf=number
新版參數格式:vector_search={"vector_index":{"threshold":0.8}}
使用樣本:
// 舊版
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&sf=0.8'
// 新版
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"threshold":0.8}}
指定top n 查詢
功能說明:指定向量檢索返回的top結果數。
舊版參數格式:&n=number
新版參數格式:vector_search={"vector_index":{"top_n":10}}
使用樣本:
// 舊版
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
// 新版
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"top_n":10}}
擷取向量得分排序
功能說明:通過在業務排序運算式中設定proxima_score(index_name) 擷取向量距離分。
-
index_name:向量索引名稱 -
傳回值類型float:向量距離,非向量召回的文檔預設為10000。
-
樣本:
proxima_score(your_vector_index)。
配置步驟:
在搜尋演算法中心 > 排序配置 > 策略配置頁面,單擊建立,設定應用範圍為預設業務排序,類型選擇運算式。
-
搜尋測試頁面引用,建立的業務排序策略進行測試。
在搜尋測試頁面中,通過設定參數 second_rank_name 引用已建立的業務排序策略,發起向量檢索查詢。可對比預設業務策略與自訂業務策略的搜尋結果,排序公式結果均顯示 SecondRank: expression[proxima_score(vec)], result[100.000000],表明向量距離分已生效。
-
系統預設使用歐式距離(l2)
-
內積距離(ip),向量得分越大,文檔相關性越高
-
歐式距離(l2),向量得分越小,文檔相關性越高
注意事項
-
系統預設在構建索引時的向量距離方式為歐式距離(l2),如需內積距離(ip),需要將內積距離的向量歸一化後再傳入引擎。
-
向量索引對應的欄位必須為DOUBLE_ARRAY類型。
-
向量分詞器目前支援的維度有64維、128維、256維、512維,每個維度對應的DOUBLE_ARRAY類型的欄位中的元素也必須為64維、128維、256維、512維,必須精準對應。
-
向量索引的長度限制為編碼前4K,一般一個query裡面最多支援查詢2個向量索引。