全部产品

下拉提示

更新时间:2020-10-26 17:54:19

功能介绍

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

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

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

使用须知

数据来源

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

query生成规则

对于候选query的生成规则,我们针对过去N(默认7)天的历史query,结合该query的词权重,召回结果数,历史搜索次数,近一天查询是否有结果等条件,选出一些热门历史查询词,作为下拉提示的候选词。系统支持两种规则生成候选query:抽取生成原值保留
抽取生成:使用阿里nlp团队基于海量自然语言训练的分析器,对字段内容进行分词,抽取有意义的term进行组合,得到候选query,这种方式尽量保证生成的候选query能召回对应的文档。
原值保留:该规则对字段内容不做分词处理,直接将其作为下拉提示的候选query。但当字段内容超过一定限制(60字节)时,将截断字段,保留前60个字节的内容作为候选query。这种方式适用于不需要分词的应用字段(店铺名,用户名,歌曲名等)或者用户自己生成候选query,直接原样展示。建议使用内容较短且含义明确的字段。

行业模板

根据不同行业数据特点,下拉提示功能提供了相应优化模板。目前已支持通用、电商和内容行业模板。
行业模板介绍

  • 通用行业模板:使用中文通用分析器进行分词,通过通用分析器模板生成候选query。
  • 电商行业模板:使用阿里在电商领域多年积累的电商分析器进行分词,该分词模型用于识别query、title等电商文本中的产品词、品牌词、产品修饰词、风格、材质等标签以及每个词的词权重。然后根据电商行业常见标签组合得到一些候选query,并根据每个query的词权重,召回文档数,历史搜索次数等指标,综合计算query分数作为在线查询时的排序依据。
  • 内容行业模板:使用IT-内容分析器进行分词,根据内容行业常见标签组合得到候选query。

注意

  • 建议在搜索请求中设置raw_query参数,便于数据处理时识别终端用户输入的原始查询词,详见搜索处理文档
  • 内容行业模板仍在优化中,如使用后存在疑问,请及时联系我们。


人工干预

下拉提示支持的干预项包括:

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

    数据源应用文档过滤

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

控制台配置如下图所示:
1

候选query结果干预

黑名单:黑名单中的关键词支持包含匹配,包含黑名单关键词的query将不会出现在下拉提示结果中。因此,当下拉提示结果中出现一些业务上不想要的结果时,可将关键词添加到下拉提示黑名单中,实现对这些结果的屏蔽。
白名单:当白名单中的query满足推荐条件时,将优先在下拉提示中显示。因此,当某些优质query没有被识别出来,或者排序靠后时,可将其加到白名单中,实现更好的下拉提示效果。**
黑名单和白名单的具体配置,可点击此处进行查看。

配额说明

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

注意事项

  • 标准版应用类型,不支持下拉提示。仅高级版应用支持;
  • 下拉提示的名称限制:同一用户不可设置名称相同的模型(包括下拉提示、人气模型、类目预测、热搜、底纹);
  • 下拉提示仅支持从一个应用中选择创建了索引的TEXT、SHORT_TEXT、LITERAL、INT类型的字段作为数据来源;
  • 同一个模型最多可选择 3 个训练字段。
  • 修改应用结构时,不能修改下拉提示数据来源的字段;
  • 删除应用时,对应的下拉提示也会被删掉;
  • 下拉提示搜索时,query参数长度最大支持18字节,否则会报错,返回无结果;
  • 下拉提示搜索时,hit参数的取值范围为(0, 10]的整数,否则按默认10处理,且会返回一个错误(例:当hit设置了0或-1或11时,默认按10处理并返回一个错误。);
  • 黑名单中的关键词条数不能超过500;
  • 白名单中的query条数不能超过500;
  • 黑名单和白名单数据有冲突时,黑名单的屏蔽优先级更高;
  • 黑名单和白名单的修改均可实时生效;
  • 下拉提示模型创建之后系统默认开启定时模型训练,下拉提示的数据随模型的定时训练周期性更新;
  • 下拉提示的训练的时间和应用的数据量、系统负载有关;如果长时间(大于半个小时)没有训练结束,请联系我们;
  • “中文同音别字”补全召回功能已默认生效。

使用建议

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

流程演示

 1.应用列表—->扩展功能—->下拉提示(下图的搜索测试均以os_test应用为例),点击“创建”:

2

 2.输入“模型名称”、选择“行业类型”、选择“训练字段”及抽取方式、输入“过滤条件”【可省略】,点击“完成”:

3

 3.在下拉提示列表页,点击“开始训练”,训练已创建的模型:

4

 4.下拉提示模型开启训练后,需要20-30分钟左右的训练时间:

5

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

原值保留
6

抽取
7

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

下拉提示页面介绍


下拉提示列表页介绍

当用户通过开放搜素控制台:功能扩展—->下拉提示,进入下拉提示列表页(如下图):8
列表页中显示下拉提示模型的“模型名称”、“是否已有可用模型”、“最后训练时间”、“近一次训练状态”(包括待训练、训练中、已训练并通过、数据异常四种状态)、“昨日PV”等信息。操作栏中可对模型进行模型详细查看、开始训练/重新训练模型、查看模型数据指标、删除模型等操作。

下拉提示模型详情页介绍

基本信息和配置信息:

9
基本信息中主要展示了模型创建时间、是否已有可用模型、最后训练时间、近一次训练状态(如果为数据异常状态,则会在表格后展示“异常报告”悬浮窗)。
配置信息中主要展示了模型配置的行业类型、定时训练的周期、训练字段、过滤条件以及黑/白名单。

扩展功能

功能介绍

  • 高频搜索词:将用户搜索频率作为候选词排序依据,优先将满足推荐条件的用户搜索频率较高的词作为下拉提示候选query,包含“生效中”和“未开启”两种状态;
  • 历史搜索词:优先展示用户之前搜索过的query,包含“生效中”和“未开启”两种状态;
  • 智能排序:根据点击、购买等用户行为信息智能排序候选query,包含“生效中”和“未开启”两种状态;

开启方式

  • 高频搜索词:需要上传raw_query参数。
  • 历史搜索词:需要上传raw_queryuser_id参数。
  • 智能排序:需要上传raw_queryuser_idfrom_request_id参数,开启数据采集后效果更佳。

注意raw_queryuser_idfrom_request_id参数介绍可点击此处进行查看。

核心指标数据

可选择不同的时间区间,以表格和折线图的形式展示下拉提示模型的核心指标数据:
10
注意:具体指标含义,可参考下拉提示报表

下拉提示 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.2.0

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

代码演示:

  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. import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
  6. import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import java.nio.charset.Charset;
  11. public class SuggestDemo {
  12. static private final String accesskey = "填入accesskey信息";
  13. static private final String secret = "填入secret信息";
  14. static private final String host = "填入下拉提示关联应用所在区域的host";
  15. OpenSearch openSearch;
  16. OpenSearchClient openSearchClient;
  17. static private final byte hits = 8; //最大返回下拉提示的条数
  18. static private final String suggestionName = "填入下拉提示名称"; //填入下拉提示名称
  19. @Before
  20. public void setUp() {
  21. //初始化openSearch对象
  22. openSearch = new OpenSearch(accesskey, secret, host);
  23. openSearchClient = new OpenSearchClient(openSearch);
  24. }
  25. @Test
  26. public void TestEnv() {
  27. //查看文件和默认编码格式
  28. System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
  29. System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
  30. //创建下拉提示对象
  31. SuggestionClient suggestionClient = new SuggestionClient(suggestionName, openSearchClient);
  32. String query = "填入查询词"; //填入查询词
  33. suggestionClient.setQuery(query); //设置查询词
  34. suggestionClient.setHits(hits); //设置最大返回下拉提示的条数
  35. try {
  36. String result = suggestionClient.search(); //查询
  37. System.out.println(result); //打印召回的结果
  38. } catch (OpenSearchException e) {
  39. e.printStackTrace();
  40. } catch (OpenSearchClientException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. @After
  45. public void clean() {
  46. openSearch.clear();
  47. }
  48. }

下拉提示的Java SDK的详情可参考:下拉提示demo
召回结果展示

  1. {
  2. "request_id": "159851481919726888064081",
  3. "searchtime": 0.006246,
  4. "suggestions": [
  5. {
  6. "suggestion": "裙子潮"
  7. },
  8. {
  9. "suggestion": "裙子小个子 连衣裙"
  10. },
  11. {
  12. "suggestion": "裙子 波点连衣裙"
  13. },
  14. {
  15. "suggestion": "裙子 减龄"
  16. },
  17. {
  18. "suggestion": "裙子 波点"
  19. },
  20. {
  21. "suggestion": "裙子小个子"
  22. },
  23. {
  24. "suggestion": "裙子小个子波点"
  25. }
  26. ]
  27. }

注意:召回结果返回的requestID,可以用于搜索请求的关联。

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

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

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

    关联方法:

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

举例:

通过下拉提示API 查询出来的结果中的requestID是:159851481919726888064081,如下如果想关联搜索请求,可参考:

  1. SearchParams searchParams = new SearchParams(config);
  2. searchParams.setQuery("title:'裙子小个子'"); //通过下拉提示引导的
  3. ///添加from_request_id参数
  4. Map<String, String> customParam =new HashMap<>();
  5. customParam.put("from_request_id","159851481919726888064081");
  6. searchParams.setCustomParam(customParam);
  7. //执行查询语句返回数据对象
  8. SearchResult execute = searcherClient.execute(searchParams);
  9. //以字符串返回查询数据
  10. String result = execute.getResult();
  11. System.out.println(result);