搜索关键字高亮_SpringBoot+Mybatis-Plus+Elasticsearch 实现关键字搜索高亮展示

本文介绍了如何利用SpringBoot、Mybatis-Plus和Elasticsearch实现搜索关键字高亮展示。讲解了Elasticsearch与数据库查询的区别,以及RabbitMQ的使用场景。具体实现包括与SpringBoot的整合、文章数据同步到Elasticsearch、分页搜索和高亮显示等。
摘要由CSDN通过智能技术生成

一、概述&介绍

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

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于springcloud+Netty+MQ+mysql的分布式即时聊天系统源码+数据库+项目说明.zip # KT-Chat 分布式即时聊天系统 **技术选型**:Java、SpringCloud、Nacos、Sentinel、Netty、MySQL、Redis、RocketMQ 等 **项目描述**:项目基于 SpringCloud Gateway + Nacos + Sentinel + OpenFeign 作为分布式系统架构,基于 Netty 实现高性能网络通信。主要功能有:一对一聊天以及群组聊天、好友管理、群组管理等。 项目独立完成,包括需求分析、设计、开发实现。 关于我在项目中使用 MySQL 读写分离的总结:[MySQL主从延迟的解决方案](https://blog.csdn.net/KIMTOU/article/details/125033199) ## 用例分析 用户能够在聊天系统上进行网络通信,与好友进行实时一对一聊天,与群组成员进行群聊。用户用例图如下所示: 1. 用户登录:登录系统 2. 聊天:包含与好友进行一对一聊天,与群组成员进行群聊。 3. 群聊管理:新建群聊、加入群聊、退出群聊。 4. 好友管理:显示好友列表,添加、删除好友。 5. 在线离线状态显示:查看好友的在线、离线状态。 6. 聊天记录管理:将聊天记录存入数据库,能够显示、删除存储的聊天记录。 <img src="https://cdn.tojintao.cn/Chat原理图.png" alt="img" style="zoom:67%;" /> ## 系统设计 #### 系统总体设计 分布式即时聊天系统分为用户信息子系统、长连接管理子系统、聊天信息子系统共三个子系统,API 网关负责将请求路由至各个子系统。 * 用户信息子系统包含权限校验模块、用户登录模块、好友管理模块,其中好友管理模块包括好友列表、添加好友、删除好友功能; * 长连接管理子系统包含在线状态管理模块、聊天主模块、消息推送模块,其中聊天主模块包括一对一聊天和群聊功能; * 聊天信息子系统包含群聊管理模块、聊天记录管理模块,其中群聊管理模块包括新建群聊、加入群聊、退出群聊功能。 <img src="https://cdn.tojintao.cn/KT-Chat系统结构图.png" style="zoom:67%;" /> #### 系统架构设计 ![](https://cdn.tojintao.cn/KT-Chat系统架构设计.png) 项目基于 Nacos 作为注册中心,将各个服务注册进 Nacos,包括 Netty 服务端;使用 SpringCloud Gateway 作为服务网关,是所有请求的统一入口;限流组件使用 Sentinel;基于 Netty 进行通信、维护长连接;RocketMQ 作为消息队列,处理聊天消息的异步入库以及解决分布式 Netty 节点问题; Zookeeper 用于分布式 id 的生成;Redis 用于记录用户在线状态以及记录 Netty 节点的元数据;MySQL 对数据进行持久化。 ## 运行截图 #### 一对一聊天 ![](https://cdn.tojintao.cn/聊天测试1.PNG) #### 群聊 ![](https://cdn.tojintao.cn/群聊测试1.PNG) ## 启动说明 1. 启动本项目时,需提前启动 Nacos、RocketMQ、MySQL、Redis、ElasticSearch、Sentinal 实例。 2. conntector 与 connector-2 这两个模块并不一样,connector-2 使用了 Dubbo 进行消息转发(实验阶段),而 connector 使用 Feign 进行 HTTP 调用转发消息。启动 connector 就行了。 3. 每个服务都允许运行多个实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值