ElasticSearch7+Spark 构建搜索服务&推荐系统
整理总结一下 ElasticSearch7+Spark 构建高相关性搜索服务&千人千面推荐系统的笔记
完成一个点评搜索推荐项目 SpringBoot、ElasticSearch、Spark
概述 设计 业务需求 技术分解 模块设计等
项目概述
完成一个点评搜索推荐项目
我们做一个合格的面向C端的系统,搜索及推荐能力是必不可少的。
搜索推荐
- 快速根据用户关键词搜索给出满意的结果
- 结合用户的历史行为、兴趣偏好等推荐给用户想到的服务商品以提升浏览点击率和交易转化率。
搜索服务必备
-
完整丰富的待搜索数据源
-
高效且稳定的搜索引擎
-
相关性语义的智能理解
推荐系统必备
-
完整丰富的训练及测试数据集
-
个性化千人千面的召回及排序机器学习算法
-
可解释且有实际意义的评价指标
项目设计
- 业务需求BRD及产品需求PRD的概念
- 如何将项目需求演化为技术方案,架构设计及落地的操作过程
- 完成项目的技术设计
项目基础搭建
-
使用SpringBoot完成业务系统的基础搭建
-
接入Mybatis完成MySQL数据源的接入
-
封装通用返回值,通用异常处理的基础能力建设
业务领域模型能力建设
-
用户领域模型
-
服务品类
-
运营后台
-
门店
-
商户能力建立
搜索推荐初级
-
使用业务系统及数据库能力建设关键词搜索及二次聚合筛shai选
-
结合lbs地理围栏通过距离和评价控制排序策略
-
使用简单的线性推荐策略完成初级的推荐系统
搜索进阶
-
通过中文分词器完成中文分词学习
-
借助logstash-input-jdbc学习全量及非实时增量索引构建
-
改造点评搜索应用,设计搜索架构
搜索再进阶
- 通过定制化分词器及同义词扩展丰富搜索准确性
- 通过词形分析及相关性重塑算法打造可理解语法的搜索引擎
- 通过定制化canal中间件完成准实时增量索引接入
推荐进阶
- 通过Spark Mllib的ALS算法完成个性化召回体系
- 通过Spark Mllib的LR算法完成个性化排序体系
- 改造点评推荐架构,升级个性化推荐
环境参数介绍
- 后端业务 JDK8、SpringBoot框架
- 后端存储MySQL数据库5.7 Mybatis接入
- 搜索系统ElasticSearch 分布式搜索引擎 Canal 1.1.3
- 推荐系统 spark mllib机器学习组件 2.4.4
- 前端页面 HTML、CSS、JS、jQuery等
项目设计
项目设计
业务需求
需求分析,理解需求分析
技术分解,确定技术选型
模块设计,完善系统流程
模拟现实情况中,点评搜索推荐项目从业务需求BRD到产品需求PRD,最终到技术方案选型,架构设计及技术落地的整个过程。
业务需求
业务需求
业务需求BRD (Business Requirement Document)
用户故事 (User Story)
产品PRD(Product Requirement Document)
业务需求
- 仿大众点评做H5应用
- 具备搜索线下门店服务功能
- 具备推荐线下门店服务功能,系统推荐你喜欢的东西
点评搜索推荐BRD(业务需求)
业务目的
模仿大众点评应用提供用户线下服务的页面
业务场景
让用户可以通过对应的业务搜索想要的门店服务,并以AI推荐的方法给用户做门店推荐
使用人员
1、需要获得服务的用户
2、业务的运营人员
用户故事
- 打开应用首页,可查看服务分类
- 打开应用首页,可查看推荐门店列表
- 可通过首页搜索栏,搜索关键字对应的门店列表,并筛选或排序。
产品PRD(业务需求)
- 用户注册、登录,进入应用首页的流程
- 运营维护服务分类,商家入驻,门店管理等运营后台的功能
- 用户通过搜索关键字,筛选条件,找到自己想要的门店服务的过程
- 用户打开首页后,系统根据用户的历史行为做推荐门店服务的过程
点评搜索推荐PRD
完成一个点评搜索推荐项目,可可闭环、可落地的产品。。。
技术分解&模块设计
技术分解
-
后端业务模块
-
后端存储模块
-
前端页面
-
搜索系统
-
推荐系统
业务模块架构
业务实体
-
用户管理
-
商家那里
-
服务类型管理
-
门店管理
业务实体行为
- 用户注册,用户登录
- 商家创建、商家浏览
- 服务类型创建,服务类型查询浏览
- 门店创建,门店搜索及筛选,门店推荐
用户(编号、用户名、登录密码)
商家(商家名、是否禁用、商家评分)
门店(名字、人均价格、评分、地址、标签、营业时间)
服务类型(名称、图标、排序)
系统模块架构
技术选型
- 后端业务 JDK8、SpringBoot框架(2.1.5)
- 后端存储MySQL数据库5.7 Mybatis接入
- 搜索系统ElasticSearch 分布式搜索引擎 Canal 1.1.3
- 推荐系统 spark mllib机器学习组件 2.4.4
小结
完成一个点评搜索推荐项目
了解从从业务需求、用户故事,产品PRD(业务需求)到模块设计系统模块设计的过程,
技术选型中考虑的点和面。
点:具体技术点
线:每一个请求的处理过程是一条线,对应 Tomcat 的线程池中的一个线程面:
面:多个请求组织在一起完成一个特定模块的功能
体:多个模块组合在一起构成一个完整的项目
技术一个个点点,具体的技术点 每一个请求 浏览器发送的 request - > tomcat每一个请求用一个线程来处理 一个请求 一个线 一个模块 很多个请求组织在一起完成一个特定模块的功能
一个个面 多个模块组合在一起 一个体 点 线 面 体 正方体 项目是立体的 单一的 一条线 一个面 一个体 做项目
目标:聚焦当前要完成的任务。目标明确后才能分析实现的思路。甚至有的时候需 要对大目标进行拆解,把很多小目标各个击破。
思路:针对目标的达成进行分析。具体到项目功能的实际开发中,体现为流程图。 代码:参照思路分析时绘制的流程图,把步骤翻译成写代码时的注释,再对照注释
具体编写代码。
有一个目标 聚焦当前要完成的任务 怎么去完成 拆解 各个击破
指针 尖利 小大 聚焦 分散 不同的领域没有突破 压强
有了目标 分析 思路 怎么干成 我就知道写代码 你得去分析 写代码呀
很熟悉 初学者 重视 图 每一个步骤 拆分 拆分 一步步去实现 思路 想做的东西 清晰
一步步 顺序去做 画个流程图
点和面和体