前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 2.x:Elastic search快速入门

Spring Boot 2.x:Elastic search快速入门

作者头像
JAVA葵花宝典
发布2019-10-29 17:02:48
4260
发布2019-10-29 17:02:48
举报
文章被收录于专栏:JAVA葵花宝典JAVA葵花宝典

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下的不同文档可以拥有不同的格式

为什么选择Elasticsearch?

  • 丰富的查询方式——Elasticsearch能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。
  • 极速的查询速度——Elasticsearch通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。每个数据都被编入了索引。
  • 可观的可扩展性——Elasticsearch能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,可以在承载了 PB 级数据的成百上千台服务器上运行。
  • 强大的弹性保障——硬件故障。网络分割。Elasticsearch 检测这些故障并确保集群(和数据)的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。

如何使用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:

代码语言:javascript
复制
./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的版本,不然就会引起版本兼容性问题而报错!):

代码语言:javascript
复制
      <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.1.8.RELEASE</version>
        </dependency>

依赖已经添加完毕,下面我们就通过简单的配置来完成CRUD

CRUD

这里的配置需要注意一个点,我们访问的9200是HTTP的端口号,而使用Java的时候需要配置成9300:

代码语言:javascript
复制
spring:
  data:
    elasticsearch:
      cluster-name: my-applicatioon
      cluster-nodes: 127.0.0.1:9300

在启动日志中,我们可以看到这一点:

然后我们通过注解来完成一个index和mapping的创建(即对应关系型数据库中的库和表)

代码语言:javascript
复制
@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即可,如下:

代码语言:javascript
复制
public interface ESDao extends ElasticsearchRepository<Article,Long> {
}

然后,我们就可以在我们项目这样去用了~

和JPA一样方便,我们这时就可以把ES当做MySQL去操作即可~

完整的Demo代码我已经上传到了github,欢迎fork star pr,关于文中所需要的包,我已经上传到百度网盘,关注后回复ES即可获取链接~

https://github.com/viyog/viboot

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA葵花宝典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Elasticsearch是什么?
    • 面向文档
    • 为什么选择Elasticsearch?
    • 如何使用Elasticsearch?
      • 安装Elasticsearch
        • 安装中文分词器iK
          • 添加pom依赖
            • CRUD
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档