摘要:极速的查询速度通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的树,以及用于分析的列存储。每个数据都被编入了索引。强大的弹性保障硬件故障。检测这些故障并确保集群和数据的安全性和可用性。
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? 安装Elasticsearchhttps://www.elastic.co/cn/dow...
这里我们选择的是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/elas...
然后在es的安装目录下的plugins下新建一个ik的目录,将zip包解压到该目录下重启es即可~
在es的启动日志中看到这个说明插件已经安装并启动成功!
到这里,我们的前期准备工作就已经结束了,下面的就是在Spring Boot项目中进行操作了~
我们首先在pom.xml中添加spring-data-elasticsearch的依赖(敲黑板!!这里的版本一定要去参考一下对应的ES的版本,不然就会引起版本兼容性问题而报错!):
org.springframework.data spring-data-elasticsearch 3.1.8.RELEASE
依赖已经添加完毕,下面我们就通过简单的配置来完成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{ }
然后,我们就可以在我们项目这样去用了~
和JPA一样方便,我们这时就可以把ES当做MySQL去操作即可~
项目中用到的对应版本的包我已经上传到了百度网盘,关注公众号回复“ES”即可获取。
完整的Demo代码我已经上传到了github,欢迎fork star pr
https://github.com/viyog/viboot
原创不易,谢谢支持!
公众号文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76121.html
摘要:时间年月日星期四说明本文部分内容均来自慕课网。那么里面的数据就可以分为各种各样的索引,比如汽车索引图书索引家具索引等等。图书索引又可以细分为各种类型,比如科普类小说类技术类等等。具体到每一本书籍,就是文档,就是整个图书里面最小的存储单位。 时间:2017年09月14日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https...
摘要:注本文首发于公众号,可长按或扫描下面的小心心来订阅实验环境版本版本首先当然需要安装好环境,最好再安装上可视化插件来便于我们直观地查看数据。 showImg(https://segmentfault.com/img/remote/1460000015723674); 注: 本文首发于 My 公众号 CodeSheep ,可 长按 或 扫描 下面的 小心心 来订阅 ↓ ↓ ↓ showI...
阅读 3581·2021-11-04 16:06
阅读 3576·2021-09-09 11:56
阅读 844·2021-09-01 11:39
阅读 894·2019-08-29 15:28
阅读 2291·2019-08-29 15:18
阅读 824·2019-08-29 13:26
阅读 3327·2019-08-29 13:22
阅读 1040·2019-08-29 12:18