全部产品

下拉提示

更新时间:2020-08-28 21:27:27

功能介绍

下拉提示是搜索服务的基础功能,在用户输入查询词的过程中,智能推荐候选query,提高用户输入效率,帮助用户尽快找到想要的内容。
下拉提示实现了基于用户文档内容的query智能抽取,可以通过中文前缀,拼音全拼,拼音首字母简拼查询以及汉字加拼音,分词后前缀,中文同音别字等查询下拉提示的候选query。
例如:连衣裙长款 这个query,可以通过如下方式查询得到:

  • 中文前缀:连,连衣,…
  • 全拼前缀:l, li, lian, lianyi, lianyiqun, …
  • 简拼前缀:l, ly, lyq,…
  • 汉字加拼音:连yi, 连衣qun;
  • 分词后前缀:长款,长款连衣,连衣长,…
  • 中文同音别字: 连衣群, 联谊群,…

此外,用户可以通过干预词条对下拉提示的数据进行干预。可以看到下拉提示的多项业务指标,详见下拉提示运营报表

使用须知

数据来源

下拉提示数据目前主要来源于应用的文档。每个下拉提示最多可以从一个应用中选择3个文本类型的字段作为数据来源。处理时,系统会选取应用中的部分文档(百万级别),对这些文档中被选中的字段按照指定的规则进行处理,生成下拉提示的候选数据。之后再按一定规则保留一定量的数据作为下拉提示候选query。

query生成规则

目前,系统支持两种规则生成候选query:抽取原值保留
抽取:使用阿里nlp团队基于海量自然语言训练的分词器,对字段的内容进行分词,抽取有意义的term进行组合,得到一批候选query,这种方式尽量保证生成的候选query能召回对应的文档。
原值保留:顾名思义,该规则对字段内容不做任何处理,直接将其作为下拉提示的候选query。但当字段内容超过一定限制(60字节)时,将字段内容进行截断,保留前60个字节的内容作为候选query。这种方式适用于不需要分词的应用字段(店铺名,用户名,歌曲名等)或者用户自己生成候选query,直接原样展示,建议字段内容较短且含义明确。

行业模板

对于候选query的生成规则,我们将根据不同行业数据特点,提供相应行业优化模板(电商行业,内容行业,视频行业等),目前已经支持电商行业模板。
电商行业模板:使用阿里在电商领域多年积累的分词器进行分词,该分词模型用于识别query、title等电商文本中的产品词、品牌词、产品修饰词、风格、材质等标签以及每个词的词权重。然后根据电商行业常见标签组合得到一些候选query。并根据每个query的词权重,召回文档数,历史搜索次数等指标,综合算出来一个query分数,用于作为在线查询时的排序依据。
针对过去N(默认7)天的历史query,会结合该query的词权重,召回结果数,历史搜索次数,最近一天查询是否有结果等条件,选出一些热门历史查询词,作为下拉提示的候选词。
注意

  • 建议在搜索请求中设置raw_query参数,便于数据处理时识别终端用户输入的原始查询词,详见文档
  • 目前电商行业模板属于公测阶段,如果想使用此电商模板,请联系我们。


过程干预

目前在下拉提示整个过程支持的干预项包括:

  • 对数据源应用文档设置过滤条件。
  • 对候选query结果进行干预,包括推荐名单和黑名单。

数据源应用文档过滤

配置过滤条件后,只会使用符合该过滤条件的应用文档,用于后续下拉提示候选词生成。

参数名称 说明
过滤条件 需填写OpenSearch应用表结构字段,该过滤条件作用于当前服务中的应用全量文档数据。支持如下格式:opensearch 应用字段status(<、>、<=、>=、=、!=)数值。多个过滤条件之间AND关系,必须要使用英文逗号(,)分隔,表示且的关系(暂不支持或关系)。例如当过滤条件为 status=1,level=1 时,则只能选取符合该条件的记录。


注:目前控制台页面 暂未开放设置过滤条件入口,如需设置,请联系我们;

候选query结果干预

推荐名单:在推荐名单里的query,系统会将其排在下拉结果的前面。因此,当某些优质query没有被系统识别出来,或者排序靠后时,通过将其加到推荐名单中,达到更好的下拉提示效果。
黑名单:在黑名单中的query,就不会再出现在下拉提示的结果中。因此,当下拉提示结果中出现一些业务上不想要的结果时,可通过将这些结果添加到黑名单中,就可以实现对这些结果的屏蔽。目前,黑名单只支持精确匹配。

配额说明

目前下拉提示为免费功能,因此计算资源和存储资源为系统统一设置。每个下拉提示的计算资源约为100QPS,存储资源约200W个候选query;

注意事项

  • 标准版应用类型,不支持下拉提示。仅高级版应用支持。
  • 下拉提示仅支持从一个应用中选择创建了索引的TEXT、SHORT_TEXT类型的字段作为数据来源;
  • 修改应用结构时,不能修改下拉提示数据来源的字段;
  • 删除应用时,对应的下拉提示也会被删掉;
  • 下拉提示搜索时,query参数长度最大支持18字节,否则会报错,返回无结果;
  • 下拉提示搜索时,hit参数的取值范围为(0, 10],否则按默认10处理,且会返回一个错误(例:当hit设置了0或-1或11时,默认按10处理并返回一个错误。);
  • 推荐名单中的query条数不能超过500;
  • 黑名单中的query条数不能超过500;
  • 推荐名单和黑名单数据有冲突时,黑名单优先级更高;
  • 推荐名单和白名单的修改都需要重新训练模型后才能生效;
  • 下拉提示的数据更新,主要通过用户手动触发,或者系统默认的周期性更新;数据更新记录可以通过页面上线的模型训练记录查看;
  • 下拉提示的训练的时间,和应用的数据量、当时的系统负载有关;如果长时间(大于半个小时)没有训练结束,请联系我们;
  • 如需要使用“中文同音别字”补全召回功能,需要在url中设置re_search=homonym参数,参数详细说明见下拉提示开发指南

使用建议

  • 为进一步提升下拉提示效果(提升下拉提示引导搜索量、搜索结果点击率等),强烈建议将下拉提示请求与搜索请求关联。关联方法见文尾:下拉提示请求与搜索请求关联部分。
  • 选择内容简洁,和文档主题相关的字段;
  • 合理使用原值保留和抽取规则;
  • 查询结果中,suggestions是本次查询的结果,errors表示本次查询是否有错误发生。errors不为空,不代表suggestions为空。因此,解析时结果时,都得通过suggestions是否为空来判断是否无数据展示。

流程演示

1.左侧导航栏—->扩展功能—->下拉提示(下图的搜索测试均以os_function_test_v1应用为例):

1

2.点击“创建下拉提示”,输入下拉提示的名称、下拉提示关联应用的应用名称并添加来源字段:

2

3.选择来源字段(来源字段可以支持TEXT以及SHORT_TEXT两种类型):

3

4.如图,来源字段可以选择两种处理方式,抽取或原值保留

4

5.点击“创建”后,勾选完成后立即训练(或者不勾选手动训练),保存下拉提示配置生效:

5

6.下拉提示创建后,需要20-30分钟左右的训练时间:

6

7.下拉提示效果测试,图中分别为“抽取”以及“原值保留”的两种抽取方式的效果测试:

原值保留
7
抽取
8

8.在线查询候选词,见下面Demo。接口详细说明见下拉提示开发指南

9.为进一步提升下拉提示效果(提升下拉提示引导搜索量、搜索结果点击率等),强烈建议将下拉提示请求与搜索请求关联。关联方法见文尾:下拉提示请求与搜索请求关联部分

下拉提示 SDK 说明

API

  1. GET v3/openapi/suggestions/{suggestion_name}/actions/search?hit=10&query={your_query}&re_search=homonym&user_id=xxx

Java SDK
maven依赖:
下载地址:aliyun-sdk-opensearch 3.5.1

  1. <dependency>
  2. <groupId>com.aliyun.opensearch</groupId>
  3. <artifactId>aliyun-sdk-opensearch</artifactId>
  4. <version>3.5.1</version>
  5. </dependency>

Java SDK Demo

  1. package com.example.opensearch;
  2. import com.aliyun.opensearch.OpenSearchClient;
  3. import com.aliyun.opensearch.SuggestionClient;
  4. import com.aliyun.opensearch.sdk.generated.OpenSearch;
  5. public class SuggestionSearch {
  6. public static void main(String[] args) {
  7. final String accesskey = "填入accesskey信息";
  8. final String secret = "填入secret信息";
  9. final String host = "填入下拉提示关联应用所在区域的host";
  10. final String suggestionName = "填入下拉提示名称";
  11. final String query = "填入查询词";
  12. final byte hits = 8; // 最大返回条数
  13. final OpenSearch opensearch = new OpenSearch(accesskey, secret, host);
  14. final OpenSearchClient serviceClient = new OpenSearchClient(opensearch);
  15. final SuggestionClient suggestionClient = new SuggestionClient(suggestionName, serviceClient);
  16. suggestionClient.setQuery(query);
  17. suggestionClient.setHits(hits);
  18. String result;
  19. try {
  20. result = suggestionClient.search();
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. return;
  24. }
  25. System.out.println(result);
  26. }
  27. }

下拉提示的Java SDK的详情可参考:下拉提示demo

下拉提示请求与搜索请求关联

将下拉提示请求和搜索请求关联起来后,对业务有如下帮助:

  1. 可以统计出一些指标,用于衡量下拉提示对app搜索的效果。指标包括:下拉提示引导app搜索pv,引导app搜索点击率,引导搜索无/少结果率等,更多详细指标见下拉提示业务指标
  2. 基于关联请求数据,得到下拉提示点击结果等数据,优化下拉提示排序模型,进而提升下拉提示对app搜索的效果。

关联方法:

在opensearch app search请求中,如果此次请求是由下拉提示引导的,则在search请求中带上参数from_request_id={from_request_id}
其中from_request_id表示:本搜索请求从哪里引导而来,如果当前的query来自下拉提示、热词、底纹等功能的推荐列表,那么请求这个推荐列表的request_id可以赋给这个参数,通过关联这个引导事件,可以计算上游功能的各项指标,衡量使用效果,为优化功能提供依据。搜索处理文档中也有此参数说明。

举例:

  1. 终端用户输入:lianyi,然后OpenSearch下拉提示返回的推荐结果: “连衣裙”,“连衣裙女”,“连衣裙真丝”,“连衣裙长款” 和 对应request_id:“150116635320104116122572”。
  2. 终端用户选择:“连衣裙真丝”,触发应用商品搜索请求,则在应用商品搜索请求中增加参数:from_request_id=150116635320104116122572