Elasticsearch是一个基于Lucene的搜索服务器,Elasticsearch也是使用Java编写的,它的内部使用Lucene作索引与搜索,可是它的目的是使用全文检索变得简单,经过隐藏Lucene的复杂性,取而代之的提供一套简单一致的RESTful API。java
Elasticsearch 不单单是 Lucene,而且也不单单只是一个全文搜索引擎。 它能够被下面这样准确的形容:node
Elasticsearch是面向文档,即文档是能够被索引的信息的基本单位,而文档的格式是在NoSQL中经常使用的JSON,关于关系型数据库和Elasticsearch之间一些名词的关系的对应能够用如下的表格来表示,方便咱们后面的应用:git
关系型数据库 | Elasticsearch |
---|---|
Database | Index |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |
这里须要注意的是文档的格式不是固定的,同一个Type下的不一样文档能够拥有不一样的格式github
丰富的查询方式——Elasticsearch可以执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。spring
极速的查询速度——Elasticsearch经过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。每一个数据都被编入了索引。数据库
可观的可扩展性——Elasticsearch可以水平扩展,每秒钟可处理海量事件,同时可以自动管理索引和查询在集群中的分布方式,能够在承载了 PB 级数据的成百上千台服务器上运行。安全
强大的弹性保障——硬件故障。网络分割。Elasticsearch 检测这些故障并确保集群(和数据)的安全性和可用性。经过跨集群复制功能,辅助集群能够做为热备份随时投入使用。bash
www.elastic.co/cn/download…服务器
这里咱们选择的是6.2.2版本的ES,由于我在spring-data-elasticsearch的github上看到最新版本的支持的ES是6.2.2网络
其中3.2.x版本还没有发布正式版,因此这里选择了最新的3.1.8版本,下面咱们切换到安装目录的bin目录下,启动es:
./elasticsearch &
复制代码
这里添加 & 符号的做用是让它在后台运行。
看到这个就说明启动成功了~
由于,在咱们平常的应用中,咱们用的比较多的都是中文的分词,因此这里咱们须要一个中文的分词器
首先前往github上下载与ES版本对应的zip包
而后在es的安装目录下的plugins下新建一个ik的目录,将zip包解压到该目录下重启es便可~
在es的启动日志中看到这个说明插件已经安装并启动成功! 到这里,咱们的前期准备工做就已经结束了,下面的就是在Spring Boot项目中进行操做了~
咱们首先在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
这里的配置须要注意一个点,咱们访问的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
原创不易,谢谢支持!