一、背景
目前电商平台的商品搜索,采用的是将用户输入的词汇传入后台,通过对数据库中商品名title进行模糊匹配,进行商品搜索。这种方式,无法使用索引。效率比较低。并且只是对商品名称的单字段搜索,局限性也比较大。基于这些情况,希望引入搜索引擎来改善搜索效率问题。
二、要解决的问题
1.尽量保持原有的实时性,特别对于商品的价格数据等
2.提高搜索效率,降低数据库压力
3.支持原有的“热度”,“价格”, “新品” 三种排序方式
4.便捷的维护方式
5.平滑升级
三、技术选型
基于现有的技术栈,选型使用elasticsearch作为电商的搜索引擎。可以解决问题
1.近实时的更新(1s延时)
2.结构化数据良好的搜索支持
3.在全文搜索中提供了丰富的搜索方式和大数据分析,也可以作为以后其他搜索需求的搜索引擎。
4.RESTFUL风格接口支持所有功能
5.对php和java都有良好的支持
6.已有现成的中文分词器ik对搜索的中文内容进行分词处理
四、电商商品搜索方案规划(一期)
1.索引数据的更新方式
操作步骤:
1.保持原有的在后台商品管理功能对商品数据进行的操作
2.商品数据修改完成后,调用统一的商品更新接口,对商品数据进行更新操作。受商品活动、销量的影响,保存的数据本次不保证价格和销量数据的有效性。
3.商品信息同步API提供两种数据更新方式:
a.全量更新(不传商品id时,提供对数据的全量复写功能)
b.单id操作(传递商品id,以商品id作为es文档的id值)
2.商品搜索
操作步骤:
1.前台输入搜索关键词和选择排序方式
2.对es中title,seo关键词等字段进行索引筛选,获取符合条件的商品id
3.通过商品id查询ecstore中的实时性数据,比如实时活动价格,商品销量
4.对搜索引擎获取的数据和ecstore中的数据进行整合,合并成需要返回的数据进行返回。
五、一期方案中未完全解决的问题
1.实时性数据对数据库的依赖导致es无法提供完整的搜索服务
考虑的解决方案:
商品活动价格:商品文档中同时存储多个价格字段,包括原始价格,不同的活动价格和活动时间。然后对取出的数据集进行价格核算和排序处理,截取。该方案在商品seo比较多时,依然消耗资源。
商品销量:
a.实时性强的方案:下单操作同步商品销量。
b.牺牲一定的实时性方案:对销量数据做批量定时同步。