介绍
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的值;
非系统自动生成的向量索引,无法在查询分析文本向量化功能中选择。
如需使用自建向量索引的多路搜索功能,请联系我们。