一、概述&介绍
Elasticsearch:
Elasticsearch 是基于Lucense 技术的搜索引擎(服务器),将数据进行缓存再进行查询。
与数据库查询的比较:
(1)相当于sql查询的 like 模糊查询,但Elasticsearch支持分词模糊查询,比如字符串 “abcdef你 好abdcd” ,通过数据库查询 [select * from user where user_name like '%你 好%'; ]只能查询仅限于以“你 好”为整体得到相关的结果【abcdef你 好abdcd】或【abcdef你 好】或【你 好abdcd】等。而Elasticsearch搜索结果将“你 好”进行拆分查询,结果可以得到【abcdef你 好abdcd】【abcdef你】、【好abdcd】、【 好abd】,【ef你】等,可见查询效果更灵活范围更广。
![7f68d6460bf75fbaa5874e14f76f06b0.png](https://i-blog.csdnimg.cn/blog_migrate/abeb723a402701a9acb68d5ed66e1602.jpeg)
RabbitMQ:
MQ全称为Message Queue, [消息队列](消息队列_百度百科)(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
二、使用场景:
Elasticsearch 使用场景:网站全局搜索、电商网站商品推荐、文章内容检索、文本分析等等。
RabbitMQ 使用场景:
1. 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)
2. 异步提升效率
3. 流量削峰
官网:[https://www.elastic.co/cn/](https://www.elastic.co/cn/downloads/elasticsearch)
下载地址:https://www.elastic.co/cn/downloads/elasticsearch
三、环境描述:
技术架构:
后端:Springboot、Mybtis-Plus、Elasticsearch、RabbitMQ
前端:Freemark
四、环境搭建:
具体安装方式可以参考以下,本文不做过多讲解
Elasticsearch安装:
windows版本安装:Elasticsearch环境搭建和介绍(Windows)_君临天下-CSDN博客_elasticsearchwindows
linux版本安装:CentOS7安装并运行Elasticsearch_6.5.4_CD【刘延林】|随手记-CSDN博客_centos7elasticsearch6.5.4安装
启动系统变量限制问题参考https://www.cnblogs.com/zuikeol/p/10930685.html
RabbitMQ安装:
windows版本安装:Windows下RabbitMQ安装及配置_zhm3023的专栏-CSDN博客_rabbitmq安装
linux版本安装:Linux下RabbitMQ的安装及使用 - coder、 - 博客园
五、具体实现
本文实现为:
1. 网站文章搜索,搜索内容根据标题、内容、文章描述进行搜索,实现分页搜索
2. 发布文章数据异步同步到ES。
实现步骤描述:
1. 与SpringBoot整合;
- pom.xml导入maven依赖包
<!-- springdata整合elasticsearch -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<!--整合rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- application.yml配置
spring:
#elasticsearch 配置
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300
repositories:
enabled: true
#rabbitmq 配置
rabbitmq:
username: mblog
password: mblog
host: 127.0.0.1
port: 5672
2. 新增文章时,同步数据到elasticsearch搜索引擎服务器中;
文章数据表结构:
DROP TABLE IF EXISTS `mto_post`;
CREATE TABLE `mto_post` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`author_id` bigint(20) DEFAULT NULL,
`channel_id` int(11) DEFAULT NULL,
`comments` int(11) NOT NULL,
`created` d