Spring Boot 2精髓 - (13) Elasticsearch

spring boot

Elasticsearch 介绍

Elasticsearch,简称ES。是一个全文搜索服务器,也可以作为 NoSQL数据库,存储任意格式的文档和数据,同时,也可以做大数据的分析,是一个跨界开源产品。

ES有如下特点:

  • 全文搜索引擎, ES是建立在 Lucene 上的开源搜索引擎,可以用来进行 全文搜索地理信息搜索。Wikipedia, GitHub、 StackOverFlow 等网站均使用 ES。
  • 文档存储和查询,可以像NoSQL那样存储任意格式文档,井能根据条件查询文档
  • 大数据分析, ES号称能准确实时地进行大数据分析,数据量从TB到PB,国内外很多大公司都用ES做大数据分析
  • ES提供了RESTAPI,用来简化对ES的操作。 因此可以使用任何语言的客户端,同时也提供 Java API, SpringBoot也对 RESTAPI进行了封装,简化了开发
  • ES常常配合传统数据库一起使用, ES用来负责大数据的查询、搜索、统计分析

安装

JDK8+

  • www.elastic.co/downloads 下载
  • 解压 elasticsearch-x.x.x.zip
  • 行./bin/elasticsearch, 不能使用 root直接运行,最好为运行 ES 创建一个新的用户
  • 看到以下提示,表示安装成功
  • 9200端口是对外的 RESTFul接口, 9300端口是 ES 内部使用的端口
  • 打开浏览器,访问

基本概念

  • Index, Index是文档(Document)的集合,Index下面包含了 Type,用于对 Document 进一步分类。
    可以理解为ES中的Index相当于数据库,而Type相当于数据库中的表,ES 中可以轻易地联合Index和Type来搜索数据,数据库却不能。

  • Type,用来进一步组织Document,一个Index下可以有多个Type,比如用户信息是一 个Type,用户的支付记录是一个Type。

  • Document,文档是ES能够存储和搜索的基本信息,类似数据库表行数据,Document为JSON格式,文档属于Type。

  • Node(节点),节点是集群里的一台ESServer,用于文档的存储和查询。
    应用可以只有一个节点,也可以由上百个节点组成集群来存储和搜索数据。
    每个节点都有一个节点名字,以及所属集群的名字。

  • 集群,同样集群名的节点将组合为ES集群,用来联合完成数据的存储和搜索。
    默认的集群名字是 elasticsearch。

  • 分区(Shards)和复制(Replicas),每个Index理论上都可以包含大量的数据,超过了单个节点的存储限制,而且,单个节点处理那么大的数据,将明显限制存储和搜索性能。
    为了解决这个问题,ES会进一步将Index在物理上细分为多个分区,而且这些分区会按照配置复制到多个节点Index的分区称为主分区,复制的分区称为复制分区。
    这样的好处是既保证数据不会丢失,又提高了查询的性能。

使用REST访问 Elasticsearch

ES 操作基本上分为以下几类:

  • 文档的增删改查
  • 全文搜索
  • 聚合搜索
  • 处理人类语言
  • 地理位置搜索

使用RestTemplate访问 ES

Spring Data Elastic

Spring Data Elastic是Spring官方提供的访问ES的方式,相对于直接 REST访问,它有以下优势:

  • 完善的封装,Spring Data Elastic遵循Spring Data规范,你只要会使用Spring Data,比如SpringJPA,就能使用ElasticData。
  • 屏蔽了ES REST接口的复杂性,就像调用普通方法那样调用 ElasticData, Spring会自动调用 Elastic底层 API来完成查询。

安装 Spring Data

依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

application.properties 配置:

1
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

Entity

  • @Document 表示这是一个 ElasticData, indexName和 type对应于 Elasticsearch 的Index和Type
  • @Id 声明了文档的主键,同 SpringData一致

Dao

Dao继承了Spring Data 的CrudRepository,因此自带了简单的增,删,改,查操作

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :