微服务项目实战-黑马头条(八):App端-文章ES搜索、MongoDB搜索记录和关键词联想

   日期:2024-12-25    作者:b1245434 移动:http://ljhr2012.riyuangf.com/mobile/quote/19024.html


  • 文章搜索

    • ElasticSearch环境搭建

    • 索引库创建

    • 文章搜索多条件复合查询

    • 索引数据同步

  • 搜索历史记录

    • Mongodb环境搭建

    • 异步保存搜索历史

    • 查看搜索历史列表

    • 删除搜索历史

  • 联想词查询

    • 联想词的来源

    • 联想词功能实现

 
 
 
 

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

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

把资料中的上传到服务器上,放到对应目录(plugins)解压

 
 
 
 
 
  • 用户输入关键可搜索文章列表

  • 关键词高亮显示

  • 文章列表展示与home展示一样,当用户点击某一篇文章,可查看文章详情

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

使用postman添加映射

  1. ,添加映射: http://192.168.200.130:9200/app_info_article
 
 
  1. ,查询映射:http://192.168.200.130:9200/app_info_article

  2. ,删除索引及映射:http://192.168.200.130:9200/app_info_article

  3. ,查询所有文档: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 思路分析

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

说明接口路径/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.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可以删除搜索记录

  • 根据用户输入的关键字展示联想词

对应实体类

 
 

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

第一:自己维护搜索词

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

第二:第三方获取

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

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

5.3.1 接口定义

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

新建接口

 

5.3.2 业务层

新建联想词业务层接口

 

实现类

 
 

5.3.3 控制器

新建联想词控制器

 

5.3.4 测试


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号