学成在线-第11天-讲义-搜索服务 一

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

 
1、课程管理服务将数据写到MySQL数据库 
2、使用LogstashMySQL数据库中的数据写到ES的索引库。 
3、用户在前端搜索课程信息,请求到搜索服务。 
4、搜索服务请求ES搜索课程信息。 
全文检索技术研究 
参考:elasticsearch研究.md研究ElasticSearch搜索方法。
课程索引 
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创建课程发布表模型 
在课程管理服务创建模型:

@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 

public interface CoursePubRepository extends JpaRepository<CoursePub, String> {
}

2) 修改课程发布service

//保存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方法的代码,添加部分的代码如下:

//课程发布
@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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值