app端文章搜索

1) 今日内容介绍

1.1)App端搜索-效果图

image-20210709140539138

1.2)今日内容

2) 搭建ElasticSearch环境

2.1) 拉取镜像

2.2) 创建容器

2.3) 配置中文分词器 ik

因为在创建elasticsearch容器的时候,映射了目录,所以可以在宿主机上进行配置ik中文分词器

在去选择ik分词器的时候,需要与elasticsearch的版本好对应上

把资料中的elasticsearch-analysis-ik-7.4.0.zip上传到服务器上,放到对应目录(plugins)解压

2.4) 使用postman测试

image-20210709140935410

 

3) app端文章搜索

3.1) 需求分析

image-20210709141502366

 

3.2) 思路分析

为了加快检索的效率,在查询的时候不会直接从数据库中查询文章,需要在elasticsearch中进行高速检索。

image-20210709141558811

3.3) 创建索引和映射

使用postman添加映射

put请求 : http://192.168.200.130:9200/app_info_article

1606653927638

GET请求查询映射:http://192.168.200.130:9200/app_info_article

DELETE请求,删除索引及映射:http://192.168.200.130:9200/app_info_article

GET请求,查询所有文档:http://192.168.200.130:9200/app_info_article/_search

3.4) 数据初始化到索引库

3.4.1)导入es-init到heima-leadnews-test工程下

image-20210709142215818

3.4.1)查询所有的文章信息,批量导入到es索引库中

3.4.3)测试

postman查询所有的es中数据 GET请求: http://192.168.200.130:9200/app_info_article/_search

image-20210709142339535

3.5) 文章搜索功能实现

3.5.1)搭建搜索微服务

(1)导入 heima-leadnews-search

image-20210709142616797

(2)在heima-leadnews-service的pom中添加依赖

(3)nacos配置中心leadnews-search

3.5.2) 搜索接口定义

UserSearchDto

3.5.3) 业务层实现

创建业务层接口:ApArticleSearchService

实现类:

3.5.4) 控制层实现

新建控制器ArticleSearchController

3.5.5) 测试

需要在app的网关中添加搜索微服务的路由配置

启动项目进行测试,至少要启动文章微服务,用户微服务,搜索微服务,app网关微服务,app前端工程

3.6) 文章自动审核构建索引

3.6.1)思路分析

image-20210709143151781

3.6.2)文章微服务发送消息

1.把SearchArticleVo放到model工程下

2.文章微服务的ArticleFreemarkerService中的buildArticleToMinIO方法中收集数据并发送消息

完整代码如下:

在ArticleConstants类中添加新的常量,完整代码如下

3.文章微服务集成kafka发送消息

在文章微服务的nacos的配置中心添加如下配置

3.6.3)搜索微服务接收消息并创建索引

1.搜索微服务中添加kafka的配置,nacos配置如下

2.定义监听接收消息,保存索引数据

4) app端搜索-搜索记录

4.1) 需求分析

1587366878895

4.2)数据存储说明

用户的搜索记录,需要给每一个用户都保存一份,数据量较大,要求加载速度快,通常这样的数据存储到mongodb更合适,不建议直接存储到关系型数据库中

image-20210709153428259

4.3)MongoDB安装及集成

4.3.1)安装MongoDB

拉取镜像

创建容器

4.3.2)导入资料中的mongo-demo项目到heima-leadnews-test中

其中有三项配置比较关键:

第一:mongo依赖

第二:mongo配置

第三:映射

4.3.3)核心方法

4.4)保存搜索记录

4.4.1)实现思路

image-20210709153935904

用户输入关键字进行搜索的异步记录关键字

image-20210709154053892

 

用户搜索记录对应的集合,对应实体类:

 

4.4.2)实现步骤

1.搜索微服务集成mongodb

①:pom依赖

②:nacos配置

③:在当天资料中找到对应的实体类拷贝到搜索微服务下

2.创建ApUserSearchService新增insert方法

实现类:

3.参考自媒体相关微服务,在搜索微服务中获取当前登录的用户

4.在ArticleSearchService的search方法中调用保存历史记录

完整代码如下:

5.保存历史记录中开启异步调用,添加注解@Async

6.在搜索微服务引导类上开启异步调用

image-20210709154841113

7.测试,搜索后查看结果

 

4.5) 加载搜索记录列表

4.5.1) 思路分析

按照当前用户,按照时间倒序查询

 说明
接口路径/api/v1/history/load
请求方式POST
参数
响应结果ResponseResult

4.5.2) 接口定义

4.5.3) mapper

已定义

4.5.4) 业务层

在ApUserSearchService中新增方法

实现方法

4.5.5) 控制器

4.5.6) 测试

打开app的搜索页面,可以查看搜索记录列表

4.6) 删除搜索记录

4.6.1) 思路分析

按照搜索历史id删除

 说明
接口路径/api/v1/history/del
请求方式POST
参数HistorySearchDto
响应结果ResponseResult

4.6.2) 接口定义

在ApUserSearchController接口新增方法

HistorySearchDto

4.6.3) 业务层

在ApUserSearchService中新增方法

实现方法

4.6.4) 控制器

修改ApUserSearchController,补全方法

4.6.5) 测试

打开app可以删除搜索记录

5) app端搜索-关键字联想词

5.1 需求分析

1587366921085

对应实体类

5.2)搜索词-数据来源

通常是网上搜索频率比较高的一些词,通常在企业中有两部分来源:

第一:自己维护搜索词

通过分析用户搜索频率较高的词,按照排名作为搜索词

第二:第三方获取

关键词规划师(百度)、5118、爱站网

image-20210709160036983

导入资料中的ap_associate_words.js脚本到mongo中

5.3 功能实现

5.3.1 接口定义

 说明
接口路径/api/v1/associate/search
请求方式POST
参数UserSearchDto
响应结果ResponseResult

新建接口

5.3.3 业务层

新建联想词业务层接口

实现类

5.3.4 控制器

新建联想词控制器

5.3.5 测试

同样,打开前端联调测试效果