在搜索中查询关键词的意图判断直接决定搜索到的结果是否可以满足需求。OpenSearch中的查询分析可以用来理解Query搜索意图;通过对Query进行一系列智能分析,将Query进行改写后再在引擎中执行检索和排序。本文将简单介绍查询分析各个具体的基本功能。
停用词功能基本介绍
过滤查询中无意义的词(一般是使用频度过高的但不影响查询结果的词,比如标点符号、语气助词等)。
拼写纠错功能基本介绍
用户输入的Query不总是准确的,错误的输入可能导致查询结果不符合预期或无结果,因此需要对用户的输入进行拼写检查。查询分析中提供的拼写检查功能,能纠正查询词中的错误,给出正确的查询词,并根据纠错的可信度高低,决定当前查询是否使用纠错后的词。
词权重功能基本介绍
词权重分析查询中每一个词在文本中的重要程度,并将其量化成权重,权重较低的词可能不会参与召回。这样可以避免当用户输入的查询词中包含一些权重低的词时,仍然按用户输入的查询词限制召回,导致命中结果过少。
同义词功能基本介绍
在实际搜索场景中,会经常出现包含同义词的表达。例如,用户在搜索苹果手机的同时,包含iPhone的内容也能被检索并呈现。同义词功能主要是对查询词进行同义扩展,扩大召回和查询词同义的文档。
实体识别功能基本介绍
命名实体识别(Named Entity Recognition,简称NER)是对Query分词后识别每个语义实体的功能。每个语义实体会被打上相应的类型标签,类型标签重要性低的语义实体在查询中可能会被省略。比如“耐克修身连衣裙”,实体识别的结果为“耐克/品牌/中”、“修身/款式元素/低”、“连衣裙/品类/高”。
类目预测功能基本介绍
类目预测指的是对查询关键词意图和业务类目相关程度的预测,结合相关的排序表达式可以调整文档在结果中的排序。比如,搜索“手机”结果中有“手机”也有“手机壳”,根据类目预测可以分析出“数码产品”类目相关度高于“数码配件”,所以在排序的时候“数码产品”类结果会优先排序。
文本向量化功能基本介绍
使用向量模型,将Query中的文本转化为向量,然后使用多路搜索功能,同时返回文本搜索结果。例如:查询词“开放搜索”,会根据所选索引分析器中的向量模型进行文本向量化,转化为[0.1,0.3,0.5],然后到向量索引中得到向量搜索的结果。可在多路搜索模块配置相应查询策略。
索引范围
支持配置的索引范围的分析器类型:中文-通用分析、中文-电商分析、IT-内容分析、游戏行业分析、教育行业分析
通过配置应用或线下变更可以更改应用结构中的索引分析方式
Query改写策略
“Query改写策略”功能可控制参与召回的term是以AND或OR关系包含在查询结果中。 注:词权重或实体识别可以影响参与召回的term的分析。 示例:如Query为:“耐克运动鞋”,分词后term为:“耐克/运动/鞋”
连接符为AND时:Query改写结果为
(default:'耐克' AND default:'运动' AND default:'鞋')
连接符为OR时:Query改写结果为
(default:'耐克' OR default:'运动' OR default:'鞋')
“Query改写策略”功能开启方法: 在创建/编辑查询分析时,在Query改写策略栏中选择AND或OR即可:
如query词比较复杂的情况下,查询分析会改写两次query。
若第一次改写的query可以查到结果,则不会触发第二次改写的query进行查询;
若第一次改写的query没有查到结果,则会触发第二次改写的query进行扩大范围查询。
查询分析重查策略
当用户配置查询分析后,如果第一次查询召回的结果为0,则会改写原先无结果的query触发重查,用户可以通过disable
参数控制是否需要重查,以及通过re_search
参数设置重查策略,详情可参考搜索处理。
举例:
disable=re_search # 表示关闭重查
re_search=strategy:threshold,params:total_hits#6 #表示当total hits少于6时,会进行重查
当用户设置重查后,可添加fetch=qp:profile
参数来判断本次请求是否是重查召回的结果:
qp-->re_search_times,re_search_times=0表示没有触发重查,例如;
"qp": [
{
"app_name": "130180448",
"query_correction_info": [
{
"index": "index",
"original_query": "芭比布朗粉饼",
"corrected_query": "芭比波朗粉饼",
"correction_level": 1,
"processor_name": "spell_check"
}
],
"re_search_times": 0
}
],
配置re_search以及fetch参数后的请求串如下:
query=query=index:'搜索测试'&&config=start:0,hit:10,format:fulljson&fetch_fields=title;subtitle&fetch=qp:profile&re_search=re_search=strategy:threshold,params:total_hits#6
多qp查询介绍
在一次查询请求中,可以设置多个查询分析,即qp参数的格式为:qp=qpName1,qpName2
,但是有如下使用限制,假设现在有两个索引,index_1、index_2,两个查询分析器qp_1、qp_2,则:
情况一:index_1绑定qp_1,index_2绑定qp_2:
#查询语句
index_1:'xxx' AND index_2:'xxx' & qp=qp_1,qp_2 #正确
index_1:'xxx' & qp=qp_1,qp_2 #正确
index_2:'xxx' & qp=qp_1,qp_2 #正确
情况二:index_1绑定qp_1,index_1绑定qp_2:
#查询语句
index_1:'xxx' & qp=qp_1,qp_2 #报错,6601:Rewrite index used in multi qp chains
index_1:'xxx' & qp=qp_1 #正确
index_2:'xxx' & qp=qp_2 #报错,6606:No index need to process by QP
查询分析在行业类型间的对比
查询分析功能 | 通用行业 | 电商行业 | 电商增强 | IT内容 | 教育行业 | 是否支持干预词典 |
停用词 | √ | √ | √ | √ | √ | √ |
拼写纠错 | √ | √ | √ | √ | √ | √ |
词权重 | √ | √ | √ | √ | √ | √ |
同义词 | √ | √ | √ | √ | √ | √ |
类目预测 | √ | √ | √ | √ | √ | √ |
实体识别 | × | √ | √ | × | × | √ |
文本向量化 | × | × | × | × | √ | × |
注:√ 表示支持,× 表示不支持。 |