A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】学成在线-第11天-讲义-搜索服务 一

1 课程搜索需求分析
1.1 需求分析

1、根据分类搜索课程信息。
2、根据关键字搜索课程信息,搜索方式为全文检索,关键字需要匹配课程的名称、 课程内容。
3、根据难度等级搜索课程。
4、搜索结点分页显示。
1.2 搜索流程


1、课程管理服务将数据写到MySQL数据库
2、使用LogstashMySQL数据库中的数据写到ES的索引库。
3、用户在前端搜索课程信息,请求到搜索服务。
4、搜索服务请求ES搜索课程信息。
2 全文检索技术研究
参考:elasticsearch研究.md研究ElasticSearch搜索方法。
3 课程索引
3.1 技术方案
如何维护课程索引信息?
1、当课程向MySQL添加后同时将课程信息添加到索引库。
采用Logstach实现,Logstach会从MySQL中将数据采集到ES索引库。
2、当课程在MySQL更新信息后同时更新该课程在索引库的信息。
采用Logstach实现。
3、当课程在MySQL删除后同时将该课程从索引库删除。
手工写程序实现,在删除课程后将索引库中该课程信息删除。

3.2 准备课程索引信息
课程发布成功在MySQL数据库存储课程发布信息,此信息作为课程索引信息。
3.2.1创建课程发布表
课程信息分布在course_basecourse_pic等不同的表中。
课程发布成功为了方便进行索引将这几张表的数据合并在张表中,作为课程发布信息。
创建course_pub


3.2.2创建课程发布表模型
在课程管理服务创建模型:
[AppleScript] 纯文本查看 复制代码
 @Data
@ToString
@Entity
@Table(name
=
"
course_pub
"
)
@GenericGenerator(name
=
"
jpa
‐
assigned
"
, strategy
=
"
assigned
"
)
public class CoursePub implements Serializable {
private static final long serialVersionUID =
‐
916357110051689487L;
@Id
@GeneratedValue(generator =
"
jpa
‐
assigned
"
)
@Column(length =
32)
private String id;
private String name;
private String users;
private String mt;
private String st;
private String grade;
private String studymodel;
private String teachmode;
private String description;
private String pic;//图片
private Date timestamp;//时间戳
private String charge;
private String valid;
private String qq;
private Float price;
private Float price_old;
private String expires;
private String teachplan;//课程计划
@Column(name
=
"
pub_time
"
)
private String pubTime;//课程发布时间
}


3.2.3修改课程发布
在课程管理服务定义dao
1)创建course_pub表的dao

[AppleScript] 纯文本查看 复制代码
public interface CoursePubRepository extends JpaRepository<CoursePub, String> {
} 

2) 修改课程发布service

[AppleScript] 纯文本查看 复制代码
//保存CoursePub
public CoursePub saveCoursePub(String id, CoursePub coursePub){
if(StringUtils.isNotEmpty(id)){
ExceptionCast.cast(CourseCode.COURSE_PUBLISH_COURSEIDISNULL);
}
CoursePub coursePubNew = null;
Optional<CoursePub> coursePubOptional =
coursePubRepository
.findById(id);
if(coursePubOptional.isPresent()){
coursePubNew =
coursePubOptional.
get();
}
if(coursePubNew == null){
coursePubNew = new CoursePub();
}
BeanUtils.copyProperties(coursePub,coursePubNew);
//设置主键
coursePubNew.setId(id);
//更新时间戳为最新时间
coursePub.setTimestamp(new Date());
//发布时间
SimpleDateFormat simpleDateFormat
= new SimpleDateFormat(
"
YYYY
‐
MM
‐
dd HH:mm:ss
"
);
String date
=
simpleDateFormat.format(new Date());
coursePub.setPubTime(date);
coursePubRepository
.save(coursePub);
return coursePub;
}
//创建coursePub对象
private CoursePub createCoursePub(String id){
CoursePub coursePub
= new CoursePub();
coursePub.setId(id);
//基础信息
Optional<CourseBase> courseBaseOptional =
courseBaseRepository
.findById(id);
if(courseBaseOptional == null){
CourseBase courseBase
=
courseBaseOptional.
get();
BeanUtils.copyProperties(courseBase, coursePub);
}
//查询课程图片
Optional<CoursePic> picOptional =
coursePicRepository
.findById(id);
if(picOptional.isPresent()){
CoursePic coursePic
=
picOptional.
get();
BeanUtils.copyProperties(coursePic, coursePub);
}
//课程营销信息
Optional<CourseMarket> marketOptional =
courseMarketRepository
.findById(id);
if(marketOptional.isPresent()){
CourseMarket courseMarket
= marketOptional.
get();
BeanUtils.copyProperties(courseMarket, coursePub);
}
//课程计划
TeachplanNode teachplanNode
=
teachplanMapper.selectList(id);
//将课程计划转成json
String teachplanString
=
JSON.toJSONString(teachplanNode);
coursePub.setTeachplan(teachplanString);
return coursePub;
} 

修改课程发布方法,添加调用saveCoursePub方法的代码,添加部分的代码如下:
[AppleScript] 纯文本查看 复制代码
 //课程发布
@Transactional
public CoursePublishResult publish(String courseId){
....
//创建课程索引
//创建课程索引信息
CoursePub coursePub
=
createCoursePub(courseId);
//向数据库保存课程索引信息
CoursePub newCoursePub
=
saveCoursePub(courseId, coursePub);
if(newCoursePub
==null){
//创建课程索引信息失败
ExceptionCast.cast(CourseCode.COURSE_PUBLISH_CREATE_INDEX_ERROR);
}
....
} 



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马