介紹
OpenSearch的多路搜索功能結合了文本搜索和向量搜索,做到了搜索延遲和計算消耗低于OR邏輯情況下更高的準確性,并在搜題場景已經得到有效驗證。多路召回架構還可以使用到:圖片向量召回、公式召回、個性化召回等場景中。
為什么要多路召回 ?
解決分詞、同義詞、糾錯等無法覆蓋而導致漏召回的符合搜索意圖的情況;
緩解長尾query零少召回情況。
舉例:
假設用戶的query=利根川,分詞==>利根 川。
如果doc內容=利根川大自然牛肉干,分詞==>利根 川大 自然 牛肉干,此時無法通過文本分詞的方式將該doc召回,如果使用向量召回方式,則不強依賴于文本的分詞結果,向量召回是通過語義匹配召回的,則可以通過“利根川”召回“利根川大自然牛肉干”。
電商行業模板的多路搜索配置
1.配置電商行業模板,行業模板配置完成后檢查是否配置了對應的向量索引(這里用的是“向量-電商向量通用”):
2.創建查詢分析,增加一個“文本向量化”功能,并配置上1中設置的向量索引:
3.設置排序策略,電商行業模板默認會創建兩個排序策略(sys_first_default-基礎排序、sys_second_default- 針對業務排序):
4.創建多路召回策略,步驟為:設置策略名稱 --> 多路搜索配置(向量索引,文本索引) --> 配置綜合排序(排序邏輯,參與排序的文檔數量) :
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的值;
非系統自動生成的向量索引,無法在查詢分析文本向量化功能中選擇。
如需使用自建向量索引的多路搜索功能,請聯系我們。