Spring Boot 2.x(十七):快速入门Elastic Search
What —— Elasticsearch是什么?
Elasticsearch是一个基于Lucene的搜索服务器,Elasticsearch也是使用Java编写的,它的内部使用Lucene做索引与搜索,但是它的目的是使用全文检索变得简单,通过隐藏Lucene的复杂性,取而代之的提供一套简单一致的RESTful API。
Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
面向文档
Elasticsearch是面向文档,即文档是可以被索引的信息的基本单位,而文档的格式是在NoSQL中常用的JSON,关于关系型数据库和Elasticsearch之间一些名词的关系的对应可以用以下的表格来表示,方便我们后面的应用:
关系型数据库 | Elasticsearch |
---|---|
Database | Index |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |
这里需要注意的是文档的格式不是固定的,同一个Type下的不同文档可以拥有不同的格式
Why —— 为什么选择Elasticsearch?
丰富的查询方式——Elasticsearch能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。
极速的查询速度——Elasticsearch通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。每个数据都被编入了索引。
可观的可扩展性——Elasticsearch能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,可以在承载了 PB 级数据的成百上千台服务器上运行。
强大的弹性保障——硬件故障。网络分割。Elasticsearch 检测这些故障并确保集群(和数据)的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。
How —— 如何在Spring Boot实战中使用Elasticsearch?
安装Elasticsearch
https://www.elastic.co/cn/downloads/elasticsearch
这里我们选择的是6.2.2版本的ES,因为我在spring-data-elasticsearch的github上看到最新版本的支持的ES是6.2.2
其中3.2.x版本尚未发布正式版,所以这里选择了最新的3.1.8版本,下面我们切换到安装目录的bin目录下,启动es:
./elasticsearch &
这里添加 & 符号的作用是让它在后台运行。
看到这个就说明启动成功了~
安装中文分词器iK
因为,在我们日常的应用中,我们用的比较多的都是中文的分词,所以这里我们需要一个中文的分词器
首先前往github上下载与ES版本对应的zip包
https://github.com/medcl/elasticsearch-analysis-ik/releases
然后在es的安装目录下的plugins下新建一个ik的目录,将zip包解压到该目录下重启es即可~
在es的启动日志中看到这个说明插件已经安装并启动成功!
到这里,我们的前期准备工作就已经结束了,下面的就是在Spring Boot项目中进行操作了~
添加pom依赖
我们首先在pom.xml中添加spring-data-elasticsearch的依赖(敲黑板!!这里的版本一定要去参考一下对应的ES的版本,不然就会引起版本兼容性问题而报错!):
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.1.8.RELEASE</version>
</dependency>
依赖已经添加完毕,下面我们就通过简单的配置来完成CRUD
CRUD
这里的配置需要注意一个点,我们访问的9200是HTTP的端口号,而使用Java的时候需要配置成9300:
spring:
data:
elasticsearch:
cluster-name: my-applicatioon
cluster-nodes: 127.0.0.1:9300
在启动日志中,我们可以看到这一点:
然后我们通过注解来完成一个index和mapping的创建(即对应关系型数据库中的库和表)
@Data
@Document(indexName = "test",type = "article")
public class Article implements Serializable {
private Long id;
@Field(type= FieldType.Text,analyzer = "ik_max_word")
private String title;
private String content;
}
@Filed
注解中的属性可以对分词器进行配置analyzer = "ik_max_word"
,这样就可以在查询标题的时候使我们的中文分词器了~
这样,我们就创建了一个index(database)名为test,并新建一个type(table)名为article。
下面,我们如果想要完成CRUD,只需要创建一个接口去继承ElasticsearchRepository
即可,如下:
public interface ESDao extends ElasticsearchRepository<Article,Long> {
}
然后,我们就可以在我们项目这样去用了~
和JPA一样方便,我们这时就可以把ES当做MySQL去操作即可~
项目中用到的对应版本的包我已经上传到了百度网盘,关注公众号回复“ES”即可获取。
完整的Demo代码我已经上传到了github,欢迎fork star pr
原创不易,谢谢支持!
公众号
Spring Boot 2.x(十七):快速入门Elastic Search的更多相关文章
- Spring Boot 2.0 的快速入门(图文教程)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...
- Spring Boot (一)快速入门
一.关于Spring Boot 在开始了解Spring Boot之前,我们需要先了解一下Spring,因为Spring Boot的诞生和Spring是息息相关的,Spring Boot是Spring发 ...
- Spring Boot GraphQL 实战 01_快速入门
hello,大家好,我是小黑,又和大家见面啦~ 新开一个专题是关于 GraphQL 的相关内容,主要是通过 Spring Boot 来快速开发 GraphQL 应用,希望对刚接触 GraphQL 的同 ...
- Spring Boot(一):入门篇
Spring Boot(一):入门篇 一.Spring Boot介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架 ...
- Spring Boot 2.X(一):入门篇
什么是 Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架遵循"约定优于配置& ...
- Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka
欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...
- Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置
Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...
- Spring Boot 2.X 如何快速集成单元测试?
本文将详细介绍下使用Spring Boot 2.X 集成单元测试,对API(Controller)测试的过程. 一.实现原理 使用MockMvc发起请求,然后执行API中相应的代码,在执行的过程中使m ...
- 学习Spring Boot:(一)入门
微服务 现在微服务越来越火了,Spring Boot热度蹭蹭直升,自学下. 微服务其实是服务化思路的一种最佳实践方向,遵循SOA(面向服务的架构)的思路,各个企业在服务化治理上面的道路已经走得很远了, ...
随机推荐
- C#获取Access数据库中的所有表名和列名
//C#获取Access数据库中的所有表名和列名 string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" ...
- iOS用户是否打开APP通知开关跳转到系统的设置界面
1.检测用户是否打开推送通知 /** 系统通知是否打开 @return 是否打开 */ //检测通知是否打开iOS8以后有所变化 所以需要适配iOS7 + (BOOL)openThePushNoti ...
- Eclipse-----Eclipse断点调试
- UVA - 1045 The Great Wall Game(二分图最佳完美匹配)
题目大意:给出棋盘上的N个点的位置.如今问将这些点排成一行或者一列.或者对角线的最小移动步数(每一个点都仅仅能上下左右移动.一次移动一个) 解题思路:暴力+二分图最佳完美匹配 #include < ...
- 从架构层面杜绝lua中使用未定义的变量
# 从架构层面杜绝lua中使用未定义的变量 标签(空格分隔): lua --- lua中有一个很坑的地方:1.就是如果一个变量拼写错误,会自动的认为你定义了一个值为nil的全局变量.2.如果在func ...
- 【BZOJ1483】[HNOI2009]梦幻布丁 链表+启发式合并
[BZOJ1483][HNOI2009]梦幻布丁 Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2 ...
- Activity和ListActivity的区别
http://book.51cto.com/art/201007/212051.htm
- @P0或@P1附近有语法错误
分析:@P0指的是第一个参数附近有错误;为'@P1'指的是第二个参数附近错误语法有错误.
- 谈谈EJB是怎样公布Web Service的
定义 我们常常会听到.xx项目中用到了Web Service.那么.什么是Web Service呢? 首先让我们来了解一下Web Service.Web Service技术.就是能使得执行在不同机器上 ...
- 如何查看ffmpeg支持的编码器和封装格式
查看支持的编码器(也就是-vcodec后面可以接的参数):ffmpeg -codecs 查看支持的封装格式(也就是-f后面可以接的参数):ffmpeg -formats 查看支持的滤镜(也就是-vf后 ...