电商行业

本文将介绍如何使用阿里云OpenSearch基于电商场景构建出一个简单的商品搜索原型,从而满足业务对商品搜索的需求。在构建类似电商平台建设中,有一块重要的业务要求是可通过关键字搜索的方式对商品信息中不同属性进行搜索,同时可对搜索出的商品列表进行分类的过滤,采用阿里云OpenSearch产品实现一个商品搜索的原型,能很好的满足项目的需求。

环境准备

第一次开通阿里云账号并登录控制台时,会提示先创建access key才能继续使用。

  • 创建及使用应用依赖access key参数,主账号下access key参数不能为空。

  • 在为主账号创建access key参数后,还可以再创建RAM子账号access key通过RAM子账号进行访问,RAM子账号赋予对应访问权限,请参考授权访问鉴权规则

基本架构

整个原型的系统架构如下:0

创建应用

1.登录阿里云OpenSearch控制台,在左侧导航栏单击实例管理,在实例管理页面单击左上角创建实例:

image

2.选择应用类型:

本文基于电商场景下,涉及多表关系映射,所以选择支持简单多表join逻辑的高级版应用类型。关于应用类型的详细介绍请参考OpeanSearch应用类型说明

3.填写应用信息:

image

选择商品类型:目前系统支持预付费和后付费,具体区别可参考:计费方式与价格选择地域和可用区域:目前OpenSearch支持的可用区域有

  • 中国区域:华南1、华北1、华北2、华北3、华东1、华东2、中国香港

  • 亚太区域:新加坡

  • 欧洲与美洲区域:德国(法兰克福)、美国(弗吉尼亚)

应用名:应用名由以英文字母开头的数字、英文字母或下划线组成,长度不超过 30 个字符 ;注意:应用名称创建后无法修改!应用类型:高级版、标准版。购买规格:目前OpenSearch支持的有共享通用、共享计算、共享存储、独享通用、独享计算、独享存储,详情可参考:计费方式与价格存储容量和计算资源:按实际而定,计算资源估算方法:LCU个数=QPS*单次查询消耗的LCU。其中单次查询消耗的LCU可以先购买一个入共享通用型应用后,在搜索测试功能中进行测试查看单次查询消耗的LCU。

4.配置应用:

3

  • 手动创建应用结构:可以自定义应用结构进行应用创建。

  • 通过模板创建应用结构:系统默认提供了几种常用的模板样式,用户也可以将自己定义的应用结构创建成模板,可以通过已有模板快速创建出一个新的应用。

  • 上传文档生成应用结构:您可以上传已有的数据文件(仅支持JSON格式),系统会自动解析并创建出初始的应用结构(注意字段类型等需要重新定义)

  • 通过数据源创建应用结构:适用于通过RDS、MaxCompute(原ODPS)、PolarDB等数据源同步的场景,可以快速由源表结构创建出初始的应用结构,节省手动构造的工作量,降低出错概率。这里以RDS为例,其他数据源操作类似,具体详见数据源配置

使用阿里云开放存储服务ODPS、RDS、PolarDB可以在OpenSearch控制台直接配置使用相应的数据源,数据将自动同步进入OpenSearch,简单、方便、可靠。本文将以RDS为例,选择通过数据源创建应用结构。

5.连接数据源

填写数据库配置,具体参见下图:4

6.选择数据源:

5

7.定义应用结构

我们采用商品表为主表,商品价格表为辅表的方式创建了应用结构即商品价格表主键pid关联商品表外键id。 原型所用的结构如下图:7.178.定义索引结构

将商品表、商品价格表中需要搜索的相关字段添加到索引列表“default”中,这样就能通过query=default:“关键字”,对商品进行搜索操作了。具体配置见下图:8

说明

注意:分词方式直接影响搜索结果,请谨慎选择,关于分词方式的选择具体请参考文档

9.配置数据源

在这里,您可以选择是否开启数据自动同步功能。 开启后,数据更新将自动同步至OpenSearch。9

10.配置完成后,单击“完成”,此时在应用详情页中就可以看到,应用的状态处于“应用初始化中.”:

image

上传数据

上面我们是以RDS为例,索引构建中会默认开始导入全量数据,可以在应用详情页中看到具体进度。当然也可以调用OpenSearch API或者SDK来手动上传数据:image

测试

数据上传成功后就开始搜索体验了,OpenSearch控制台内置了OpenSearch搜索可以通过API/SDK或者搜索测试页面进行查询(详见APISDK说明),本文以系统中搜索测试页面为例,搜索语法请参考API开发者手册搜索接口query子句介绍。搜索结果如下图所示:12

您还可以利用OpenSearch各种自定义的功能,来获得更优的搜索体验。例如解决目前用户长尾query召回少、搜索词填写错误无法召回、输入拼音无法召回等问题,具体请参考查询分析相关性实战

配置一个查询分析:这里我们以拼写纠错为例配置一个查询分析:

第一步:创建查询分析干预词典: 1.1 依次单击控制台主页功能 搜索算法中心--召回配置--词典管理 进入查询分析干预词典页面:

image1.2 单击右上角“创建”,词典类型为拼写纠错,输入词典名称单击“保存”:141.3 在词典列表中刚刚创建的词典后单击词条管理进入干预词典页面:151.4 单击新增干预词条配置您的干预词条:161.5 单击保存,添加成功。您可以在干预词条列表中看到您创建的干预词条:17第二步:开放搜索控制台左侧导航栏中依次单击召回配置查询分析配置进入查询分析页面:image.png第三步:单击创建添加一个未上线规则,干预词典选择我们刚刚创建的dic_error:19

  • 停用词:根据系统内置的停用词典过滤查询中无意义的词(一般是使用频度过高的但不影响查询结果的词,比如标点符号、语气助词等)。例如:查询词“奔跑吧!兄弟”,经过停用词处理后标点符号“!”不参与召回。

  • 拼写纠错 :检查用户查询串中的拼写错误,并给出纠错建议。对于确定的拼写错误将直接改写原始查询串,然后进行检索;对于可能的拼写错误将仍然使用原始查询串进行检索。例如:查询词“阿里爸爸”,经过拼写纠错会改写为“阿里巴巴”,然后进行检索。

  • 词权重 :分析查询中每个词的重要程度,并将其量化成权重,权重较低的词可能不会参与召回。例如:查询词“开放搜索好不好”,经过词权重处理,只要包含“开放搜索”的文档都可以召回。

  • 同义词:根据系统提供的通用同义词库和语义模型,对查询串进行同义词扩展,以便扩大召回。例如:查询原词为”KFC”,经过同义词处理后,包含”肯德基”或者”KFC”的文档都会被召回(配合词权重功能使用效果更佳)。

  • 实体识别:命名实体识别(Named Entity Recognition,简称NER)是系统对Query分词后将每个语义实体进行需求识别的功能。每个语义实体会被打上相应的类型标签,类型标签重要性低的语义实体在查询中可能会被省略;类型标签重要性高的语义实体会直接影响类目预测模型的训练。比如“耐克修身连衣裙”,实体识别的结果为“耐克/品牌/中”“修身/款式元素/低”“连衣裙/品类/高”。

第四步:创建之后,可在查询分析界面,单击“搜索测试”进行效果验证:20第五步:调试无误后,可返回查询分析界面,在切换到“索引视角”后,将其设置为默认查询分析:2122

配置排序表达式:排序表达式允许用户为应用自定义搜索结果排序方式,通过在查询请求中指定表达式来对结果排序,具体请参考搜索相关性配置

第一步:依次单击应用主页排序配置→策略管理进入搜索结果排序管理页面:

image第二步:单击右上角的创建,添加新的基础排序(粗排):

2425基础排序(粗排)对性能影响较大,尽量选用最有代表性的字段。这里我们以配置文本分、文档新旧程度的算分配置为例。

第三步:添加新的业务排序(精排):2627这里我们以配置商品名相关性为例。

第四步:完成配置。搜索结果如下图所示:28这里搜索测试支持普通查询和设置策略排序后的查询结果对比。

配置下拉提示:电商场景中,为了减少用户输入,帮助用户尽快找到想要的内容,我们可以使用开放搜索的下拉提示功能。关于下拉提示功能的配置请参考下拉提示

配置类目预测:您也可以使用类目预测功能预测用户想要查询那个类目的结果,具体步骤请参考类目预测

其他常用配置

  • 电商场景中,如果某个商家的多个商品的文档分值都比较高,则都排在了搜索结果的前面。这样既不利于结果展示,也不利于用户体验。我们可以采用多样性聚合distinct子句来提升结果的多样性。具体用法请参考聚合子句-distinct

  • 业务上还支持按价格区间进行结果的查看,需要采用filter子句,更多用法请参考过滤子句-filter。我们以价格字段进行过滤为例,操作相关代码如下:

    if(!lowPrice.equals("")){
      queryElement.addFilter("price>=" + lowPrice);
    }
    if(!highPrice.equals("")){
      queryElement.addFilter("price<=" + highPrice);
    }

总结

至此一个简单的基于阿里云OpenSearch构建的电商场景下的搜索原型已经构建完成。OpenSearch提供了比较完善的搜索服务和API接口,能够基于OpenSearch快速实现业务对于搜索的需求,大大减少了开发工作,提高了搜索功能开发的实现效率,同时也减少了搭建复杂搜索引擎平台带来的系统部署和运维的工作量和成本。用户可以根据业务场景的不同选择OpeanSearch各种自定义配置和功能,从而获得更优的搜索体验。