-
文章搜索
-
ElasticSearch环境搭建
-
索引库创建
-
文章搜索多条件复合查询
-
索引数据同步
-
-
搜索历史记录
-
Mongodb环境搭建
-
异步保存搜索历史
-
查看搜索历史列表
-
删除搜索历史
-
-
联想词查询
-
联想词的来源
-
联想词功能实现
-
因为在创建elasticsearch容器的时候,映射了目录,所以可以在宿主机上进行配置ik中文分词器
在去选择ik分词器的时候,需要与elasticsearch的版本好对应上
把资料中的上传到服务器上,放到对应目录(plugins)解压
-
用户输入关键可搜索文章列表
-
关键词高亮显示
-
文章列表展示与home展示一样,当用户点击某一篇文章,可查看文章详情
为了加快检索的效率,在查询的时候不会直接从数据库中查询文章,需要在elasticsearch中进行高速检索。
使用postman添加映射
- ,添加映射: http://192.168.200.130:9200/app_info_article
-
,查询映射:http://192.168.200.130:9200/app_info_article
-
,删除索引及映射:http://192.168.200.130:9200/app_info_article
-
,查询所有文档:http://192.168.200.130:9200/app_info_article/_search
3.4.1 导入es-init到heima-leadnews-test工程下
3.4.2 查询所有的文章信息,批量导入到es索引库中
3.4.3 测试
postman查询所有的es中数据 GET请求: http://192.168.200.130:9200/app_info_article/_search
3.5.1 搭建搜索微服务
(1)导入 heima-leadnews-search
(2)在heima-leadnews-service的pom中添加依赖
(3)nacos配置中心leadnews-search
3.5.2 搜索接口定义
参数:UserSearchDto
响应结果:
3.5.3 控制层接口定义
3.5.4 业务层实现
创建业务层接口:ApArticleSearchService
实现类:
3.5.5 控制层实现
新建控制器ArticleSearchController
3.5.6 测试
需要在app的网关中添加搜索微服务的路由配置
启动项目进行测试,至少要启动文章微服务,用户微服务,搜索微服务,app网关微服务,app前端工程
3.6.1 需求分析
3.6.2 文章微服务发送消息
1.把SearchArticleVo放到model工程下
2.文章微服务的ArticleFreemarkerService中的buildArticleToMinIO方法中收集数据并发送消息
完整代码如下:
在ArticleConstants类中添加新的常量,完整代码如下
3.文章微服务集成kafka发送消息
在文章微服务的nacos的配置中心添加如下配置
3.6.3 搜索微服务接收消息并创建索引
1.搜索微服务中添加kafka的配置,nacos配置如下
2.定义监听接收消息,保存索引数据
3.测试
启动全部为微服务,自媒体发布一篇文章[已上架],APP端搜索可以看到该文章。
- 展示用户的搜索记录10条,按照搜索关键词的时间倒序
- 可以删除搜索记录
- 保存历史记录,保存10条,多余的则删除最久的历史记录
用户的搜索记录,需要给每一个用户都保存一份,数据量较大,要求加载速度快,通常这样的数据存储到mongodb更合适,不建议直接存储到关系型数据库中
4.3.1 安装MongoDB
拉取镜像
创建容器
4.3.2 导入资料中的mongo-demo项目到heima-leadnews-test中
其中有三项配置比较关键:
第一:mongo依赖
第二:mongo配置
第三:映射
4.3.3 核心方法
4.4.1 实现思路
用户输入关键字进行搜索的异步记录关键字
异步保存搜索记录
用户搜索记录对应的集合,对应实体类:
4.4.2 实现步骤
1.搜索微服务集成mongodb
①:pom依赖
②:nacos配置
③:在当天资料中找到对应的实体类拷贝到搜索微服务下
在当天资料中找到对应的MongoDB文件leadnews-history.sql运行
2.创建ApUserSearchService新增insert方法
实现类:
3.参考自媒体相关微服务,在搜索微服务中获取当前登录的用户
1)在app网关的过滤器中获取用户信息存入header中
2)然后在leadnews-search服务中,添加拦截器,从网关中获取用户id并存入线程中
3)上面用到了一个工具类AppThreadLocalUtil用来从线程中存取/取出用户【该类放到heima-leadnews-utils中的thread包下】
4)最后在leadnews-search服务中,添加拦截器的配置类,拦截所有请求
4.在ArticleSearchService的search方法中调用保存历史记录
完整代码如下:
5.保存历史记录中开启异步调用,添加注解@Async
6.在搜索微服务引导类上开启异步调用@EnableAsync
7.测试,搜索后查看结果
4.5.1 思路分析
按照当前用户,按照时间倒序查询
4.5.2 接口定义
4.5.3 mapper
已定义
4.5.4 业务层
在ApUserSearchService中新增方法
实现方法
4.5.5 控制器
4.5.6 测试
打开app的搜索页面,可以查看搜索记录列表
4.6.1 思路分析
按照搜索历史id删除
4.6.2 接口定义
在ApUserSearchController接口新增方法
HistorySearchDto
4.6.3 业务层
在ApUserSearchService中新增方法
实现方法
4.6.4 控制器
修改ApUserSearchController,补全方法
4.6.5 测试
打开app可以删除搜索记录
- 根据用户输入的关键字展示联想词
对应实体类
通常是网上搜索频率比较高的一些词,通常在企业中有两部分来源:
第一:自己维护搜索词
通过分析用户搜索频率较高的词,按照排名作为搜索词
第二:第三方获取
关键词规划师(百度)、5118、爱站网
导入资料中的ap_associate_words.js脚本到mongo中
5.3.1 接口定义
新建接口
5.3.2 业务层
新建联想词业务层接口
实现类
5.3.3 控制器
新建联想词控制器