5.4 内容管理模块 - 课程搜索

5.4 内容管理模块 - 课程搜索

文章目录

  • 5.4 内容管理模块 - 课程搜索
  • 一、快速入门
    • 1.1 需求分析
    • 1.2 业务流程
    • 1.3 准备环境
      • 1.3.1 搭建 elasticsearch
      • 1.3.2 索引 概念
    • 1.4 课程信息索引同步
      • 1.4.1 技术方案

一、快速入门

本项目使用elasticsearch作为索引及搜索服务

课程如果发布之后,用户还不能搜索到,因为我们发布的课程还没有写入到索引库

1.1 需求分析

之前我们是直接查询数据库获取数据,但是现在我们要使用一种全文检索的技术来搜素我们的课程

什么是全文检索

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

传统的搜索方法是先找到文章,再从文章中找到要搜索的某个词

而全文检索的方式是先找词再找文章,如果想通过某个词来找到某个文章,那只能将这个词放在索引中

全文检索可以简单理解为通过索引搜索文章

这个过程类似于通过字典中的检索字表查字的过程

下面“索引”里面都是词,所以检索的时候就拿着“词”去搜索“索引”,通过索引再找到这个“词”关联的文章,这样的话比传统搜索方式效率要高

image-20240121201328004

1.2 业务流程

  • 第一步:创建索引

在课程发布操作执行后通过消息处理方式创建课程索引

image-20240121203334938

  • 第二步:搜索

当索引创建完成之后,用户可以在页面搜索对应的内容

image-20240121203426921

可以在搜索界面,通过课程分类、课程难度等级等条件进行搜索

image-20240121203501951

1.3 准备环境

1.3.1 搭建 elasticsearch

docker容器中安装了elasticsearch和kibana

kibana 是 ELK(Elasticsearch , Logstash, Kibana )之一,kibana 一款开源的数据分析和可视化平台,通过可视化界面访问elasticsearch的索引库,并可以生成一个数据报表

开发中主要使用kibana通过api对elasticsearch进行索引和搜索操作

通过浏览器访问 http://192.168.101.65:5601/app/dev_tools#/console进入kibana的开发工具界面

修改虚拟机中的启动脚本restart.sh

docker stop elasticsearch
docker stop kibana

docker start elasticsearch
docker start kibana

image-20240121204734375

启动脚本,访问kibana,浏览Elasticsearch索引

image-20240121210755538

1.3.2 索引 概念

索引相当于MySQL中的表

Elasticsearch与MySQL之间概念的对应关系见下表

image-20240121210050837

要使用elasticsearch需要建立索引

Mapping相当于表结构

Mapping创建后其字段不能删除,如果要删除需要删除整个索引

server.name: kibana

server.host:“0”

elasticsearch.hosts:[“http://192.168.101.65:9200”]

monitoring.ui.container.elasticsearch.enabled: true

1.4 课程信息索引同步

1.4.1 技术方案

通过向索引中添加课程信息最终实现了课程的搜索,我们发现课程信息是先保存在关系数据库中,而后再写入索引,这个过程是将关系数据中的数据同步到elasticsearch索引中的过程,可以简单成为索引同步。

通常项目中使用elasticsearch需要完成索引同步,索引同步的方法很多:

1、针对实时性非常高的场景需要满足数据的及时同步,可以同步调用,或使用Canal去实现。

1)同步调用即在向MySQL写数据后远程调用搜索服务的接口写入索引,此方法简单但是耦合代码太高。

2)可以使用一个中间的软件canal解决耦合性的问题,但存在学习与维护成本。

canal主要用途是基于 MySQL 数据库增量日志解析,并能提供增量数据订阅和消费,实现将MySQL的数据同步到消息队列、Elasticsearch、其它数据库等,应用场景十分丰富。

img

它的地址:

github地址:https://github.com/alibaba/canal

版本下载地址:https://github.com/alibaba/canal/releases

文档地址:https://github.com/alibaba/canal/wiki/Docker-QuickStart

Canal基于mysql的binlog技术实现数据同步,什么是binlog,它是一个文件,二进制格式,记录了对数据库更新的SQL语句,向数据库写数据的同时向binlog文件里记录对应的sql语句。当数据库服务器发生了故障就可以使用binlog文件对数据库进行恢复。

所以,使用canal是需要开启mysql的binlog写入功能,Canal工作原理如下:

img

1、canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump

协议

2、MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

3、canal 解析 binary log 对象(原始为 byte 流)

详细使用Canal进行索引同步的步骤参考:Canal实现索引同步.pdf

4、当索引同步的实时性要求不高时可用的技术比较多,比如:MQ、Logstash、任务调度等。

MQ:向mysql写数据的时候向mq写入消息,搜索服务监听MQ,收到消息后写入索引。使用MQ的优势是代码解耦,但是需要处理消息可靠性的问题有一定的技术成本,做到消息可靠性需要做到生产者投递成功、消息持久化以及消费者消费成功三个方面,另外还要做好消息幂等性问题。

Logstash: 开源实时日志分析平台 ELK包括Elasticsearch、Kibana、Logstash,Logstash负责收集、解析和转换日志信息,可以实现MySQL与Elasticsearch之间的数据同步。也可以实现解耦合并且是官方推荐,但需要增加学习与维护成本。

任务调度:向mysql写数据的时候记录修改记录,开启一个定时任务根据修改记录将数据同步到Elasticsearch。

根据本项目的需求,课程发布后信息同步的实时性要求不高,从提交审核到发布成功一般两个工作日完成。综合比较以上技术方案本项目的索引同步技术使用任务调度的方法。

如下图:

img

1、课程发布向消息表插入记录。

2、由任务调度程序通过消息处理SDK对消息记录进行处理。

3、向elasticsearch索引中保存课程信息。

如何向向elasticsearch索引中保存课程信息

执行流程如下:

由内容管理服务远程调用搜索服务添加课程信息索引,搜索服务再请求elasticsearch向课程索引中添加文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/410765.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sora抢饭碗!好莱坞大亨停止,8亿美元投资

好莱坞消息,著名演员、影视投资人Tyler Perry在看到OpenAI最新发布的文生视频模型Sora后,停止了8亿(约57亿元)美元的投资。 该投资项目位于亚特兰大,本来要扩展十几个摄影棚用于影视剧的拍摄(类似横店影视…

大学开学季,创业入局做校园外卖,这些新的运营思路可以参考

在大学生的学习、生活和消费中,高校已经形成了具有独特属性的市场。这个市场既具有一般市场的特点,同时也有学校特有的一些特点。校园生活服务平台的商业模式就是在互联网发展的背景下出现的,并且已经变得非常成熟和稳定。 就校园外卖而言&a…

Java+SpringBoot+Vue+MySQL:疫情隔离酒店管理的全面技术解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

【云原生】Spring Cloud Gateway的底层原理与实践方法探究

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:从入门到入魔》 🚀 本…

切换Linux中的gcc版本

一、允许在系统中并行安装多个软件版本 命令1: yum -y install centos-release-scl 二、安装GCC 8及相关工具 命令2: yum -y install devtoolset-8-gcc devtoolset-8-gcc-c devtoolset-8-binutils 三、将系统中的默认shell环境切换到与devtool…

如何在Win系统搭建Oracle数据库并实现远程访问【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

Flink代码单词统计 ---批处理

flatMap:一对多转换操作,输入句子,输出分词后的每个词groupBy:按Key分组,0代表选择第1列作为Keysum:求和,1代表按照第2列进行累加print:打印最终结果 1.WordCount代码编写 需求&am…

js设计模式:路由模式

作用: 业务开发时,路由这个概念无论对于前后端来说肯定是不可缺少的 前端的vue-router就是很经典的路由模式 示例: //这里模拟实现一个vueclass Vue{constructor(options){Object.keys(options).forEach(item>{this[item] options[item]})}$mount(node){console.log(挂载…

基础知识常见算法识别

特征值识别 很多常见的算法,如AES、DES等,在运算过程中会使用一些常量,而为了提高运算效率,这些常量往往被硬编码在程序中 通过识别这些特征值,可以对算法进行一个大致判断 算法特征值(无特殊说明为十六…

Web3的奇迹:数字世界的新篇章

在数字化时代的潮流中,Web3正以其令人振奋的潜力和前景引领着我们进入一个全新的数字时代。作为互联网的下一代,Web3将重新定义我们对数字世界的认知和体验,为我们带来无限的可能性和奇迹。本文将深入探讨Web3的重要性、核心特征以及未来展望…

智能美颜引领短视频创作风潮:探秘美颜SDK技术背后的创新

美颜技术不仅改善了用户的拍摄体验,还推动了短视频创作的风潮。本文将深入探讨智能美颜在短视频创作中的应用,以及美颜SDK技术背后的创新。 一、短视频时代的美颜潮流 随着短视频应用的普及,用户对于视频质量的要求也越来越高。然而&#…

精品springboot科研项目工作量管理系统的设计与实现

《[含文档PPT源码等]精品基于springboot科研工作量管理系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术&…

Wagtail安装运行并结合内网穿透实现公网访问本地网站界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默&#xf…

c# 异常处理

异常类 .NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。 默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。 系统异常一般不可预测,比如内存堆…

RabbitMQ 面试八股题整理

前言:本文是博主网络自行收集的一些RabbitMQ相关八股文,还在准备暑期实习,后续应该会持续更新...... 参考:三天吃透RabbitMQ面试八股文_牛客网 目录 RabbitMQ概述 什么是 RabbitMQ? 说一说RabbitMQ中的AMQP 为什么…

rancher change domain name 【rancher 更改域名】

文章目录 1. 预备条件2. 准备全部集群的直连 kubeconfig 配置文件3. 准备证书4. 更新证书4.1 Rancher 单节点运行(默认容器自动生成自签名 SSL 证书)#4.2 Rancher 单节点运行(外置自签名 SSL 证书)#4.3 Rancher HA 5. 修改 Ranche…

前端解析后端返回文件流格式数据

当后端接口返回数据是一个文件流数据时,如下后端返回给我的是一个pdf文件流数据 methods: {gotoPri() {protocolApi().then(res > {this.createPdf(res.data,XXX协议)})},createPdf(res, name) {// Blob构造函数返回一个新的 Blob 对象并指定type类型。let blob …

Vue.js+SpringBoot开发智能停车场管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

Pytorch学习(杂知识)

目录 Mini-batch 魔法函数 DataLoader与DataSet transformers的简介 torchvision简介 torch.no_grad() Softmax ReLu 随机梯度下降(Stochastic Gradient Descent,SGD) torch.nn.CrossEntropyLoss(),交叉损失函数 Tenso…

掌握C语言指针,轻松解锁代码高效性与灵活性

1. 指针与地址 1.1 概念 我们都知道计算机的数据必须存储在内存里,为了正确地访问这些数据,必须为每个数据都编上号码,就像门牌号、身份证号一样,每个编号是唯一的,根据编号可以准确地找到某个数据。而这些编号我们就…