全部產品
Search
文件中心

OpenSearch:教育行業模板-多路搜尋

更新時間:Aug 22, 2026

介紹

OpenSearch的多路搜尋功能結合了文本搜尋和向量搜尋,做到了搜尋延遲和計算消耗低於OR邏輯情況下更高的準確性,並在搜題情境已經得到有效驗證。多路召回架構還可以使用到:圖片向量召回、公式召回、個人化召回等情境中。image

純文字查詢與多路搜尋在搜題情境下的對比

為什麼搜題要做多路召回?教育拍照搜題情境相比網頁/電商的文本搜尋有顯著差異:

  • 搜尋Query特別長:常規檢索term數上限30,搜題可能需要100

  • 搜尋Query可能是由拍照OCR識別之後得到的文本,關鍵term的識別錯誤會嚴重影響召回排序

純文字查詢方案

1.OR邏輯查詢:

  • 為了降低無結果率,搜題客戶常見的系統是基於ES預設的OR邏輯,搜尋延遲高,計算消耗大

  • OpenSearch也支援OR邏輯,針對搜尋延遲高可以通過並行搜尋的方式最佳化,但整體計算消耗仍然高​

2.AND邏輯查詢

  • 採用通用的Query分析模組,無結果率高,整體準確性不如OR邏輯

  • 針對教育領域最佳化定製的Query分析模組,大幅提高效果,準確性接近OR邏輯

​

文本向量檢索

目標:通過文本向量檢索擴召回,結合AND邏輯查詢,做到搜尋延遲和計算消耗低於OR邏輯的情況下準確性更高向量召回採用BERT模型,其中針對教育搜題做的特別最佳化有:

  • BERT模型採用達摩院自研的StructBERT,並針對教育行業定製模型

  • 向量檢索引擎採用達摩院自研的proxima引擎,準確性和運行速度遠超開源系統

  • 訓練資料可以基於客戶的搜尋日誌不斷積累,效果持續提

效果:

  1. 召回率達到OR邏輯

  2. 準確性超出OR邏輯3%-5%

  3. 整體召回doc數量減少40倍,搜尋延遲降低10倍以上

教育行業模板的多路搜尋配置

1.配置教育行業模板,行業模板配置完成後檢查是否配置了對應的向量索引(這裡用的是“向量-教育向量k12”):在索引結構的索引欄位列表中,包含三個索引:default(預設文本索引,包含 title 和 content 欄位,分析方式為"行業-教育搜題",查詢樣本 query=default:"雲搜尋")、vector(向量索引,包含 title 欄位,分析方式為向量-教育向量k12,查詢樣本 query=vector:"雲搜尋")、id(包含 id 欄位,分析方式為"關鍵字",查詢樣本 query=id:"雲搜尋")。其中向量索引 vector 及其對應的分析方式 向量-教育向量k12 是實現多路搜尋的關鍵配置項。2.建立查詢分析,增加一個“文本向量化”功能,並配置上1中設定的向量索引:在控制台左側導覽列選擇搜尋演算法中心 > 查詢分析,找到查詢分析規則(如 sys_default),單擊編輯開啟編輯規則彈窗。設定行業類型為教育、已選類為搜題、Query改寫策略為AND,在功能選擇地區勾選文本向量化,並在右側向量索引下拉框中選擇 vector,然後單擊確定。3.設定排序策略,教育行業模板預設會建立兩個CAVA指令碼的業務排序(sys_text_rank-針對文本索引、sys_vector_rank- 針對向量索引):在控制台左側菜單選擇搜尋演算法中心 > 排序配置,進入策略管理標籤頁。策略列表中包含系統內建的 sys_text_rank 和 sys_vector_rank 兩個 cava 指令碼類型的業務排序策略,狀態均為發布可用。

4.建立多路召回策略,步驟為:設定策略名稱稱 --> 多路搜尋配置(向量索引,文本索引) --> 配置綜合排序(排序邏輯,參與排序的文檔數量)。選擇目標應用,填寫查詢策略名稱稱(如 test_strategy_1)。在多路搜尋配置中同時勾選向量搜尋和文本搜尋。向量搜尋的業務排序選擇 sys_vector_rank,召回結果佔比設為 50%;文本搜尋的業務排序選擇 sys_text_rank,佔比同樣為 50%。綜合排序配置中歸併排序選擇 sys_text_rank,排序文檔數量填寫 5000,單擊確定完成建立。

5.控制台測試:

假設查詢query為:搜尋測試,多路搜尋查詢策略為sys_strategy,查詢分析規則為sys_default。注:以上三個參數,缺一不可(查詢分析如果設定為預設,這裡可以省略)。查詢請求格式:

query=default:'搜尋測試'&search_strategy=sys_strategy&raw_query=搜尋測試&qp=sys_default

SDK參數配置:(以Java為例)

...
//定義Config對象,用於設定config子句參數,用於分頁或設定資料返回格式
Config config = new Config(Lists.<String>newArrayList(appName));
config.setStart(0);
config.setHits(10);
​
//設定返回格式為json
config.setSearchFormat(SearchFormat.FULLJSON);
​
​
// 建立參數對象
SearchParams searchParams = new SearchParams(config);
​
//設定查詢需要傳入的參數
HashMap<String,String> paraMap=new HashMap<String,String>();
//設定raw_query
paraMap.put("raw_query","搜尋測試");
//設定多路搜尋
paraMap.put("search_strategy","sys_strategy");
searchParams.setCustomParam(paraMap);
​
//設定查詢分析
List<String> qpName = new ArrayList<String>();
qpName.add("sys_default");  //設定查詢分析名稱
searchParams.setQueryProcessorNames(qpName);
​
...

注意事項

  • 多路召回功能目前只針對獨享型應用進行開放;

  • 多路召回功能暫不支援aggregate、distinct子句;

  • 每個應用最多建立10個多路召回的查詢策略;

  • 多路搜尋配置中,文本搜尋和向量搜尋是必選項,並且二者的召回結果佔比和需為100%;

  • 多路搜尋配置中,文本搜尋和向量搜尋的基礎排序從排序配置-基礎排序中選擇,業務排序從排序配置-業務排序中選擇;

  • 綜合排序配置中,歸併排序從業務排式中選擇,必選,也可以選擇“無”,預設選擇“無”,排序文檔數量為必填,最多為5000,需填寫大於0的值;

  • 非系統自動產生的向量索引,無法在查詢分析文本向量化功能中選擇。

  • 如需使用自建向量索引的多路搜尋功能,請聯絡我們。