SpringBoot实战系列之集成es

一、前言

对SpringBoot、SpringBoot Data ElasticSearch以及ElasticSearch的安装版本是有要求的,如果确定安装的ElasticSearch的版本是合适的,可以参考下列连接,否则就要自己去创建连接,完成CURD

二、ElasticSearch的介绍说明

ElasticSearch相当于一个分布式数据库
ES官网

三、Java操作ES

使用客户端调用es服务的两种方式
有两种方式,一种 是9200端口或叫rest 接口,
另一种是用 节点的9300端口或叫 TransportClient

Java API (Java API操作ES方式,此方式使用的是TransportClient方式,9300端口,已在7.00版本之后弃用)

image.png

简言之:
在es7开始就废弃transportClient了,在es8后移除;据说是因为他们觉得效率低下。目前推荐使用restClient进行增删改查。

四、使用REST Client的方式(使用9200端口)

因为之前通过transportClient的方式被移除了,所以主流的使用REST

4.1 SpringBoot 整合 ES

SpringBoot整合ES的三种方式(API、REST Client、Data-ES)

SpringBoot整合ES的三种方式(API、REST Client、Data-ES) (REST Client方法可参考)

4.1.1 版本问题

Spring Data for Elasticsearch(github地址)
Spring Data for Elasticsearch(spring.io地址)
springboot、spring-data-elasticsearch、elasticsearch版本对应(spring.io地址)

4.1.2 集成参考

Spring Boot & ES 实战,值得参考!
spring-data-elasticsearch与elasticsearch版本对应
Spring Boot整合Spring Data Elasticsearch 踩坑
spring + spring data elasticsearch+ elasticsearch 使用ElasticsearchRestTemplate高亮查询!

4.1.3 ElasticsearchRepository

SpringBoot整合Elasticsearch的Java Rest Clientz

ElasticsearchRepository
优点: 简单,SpringBoot无缝对接,配置简单
缺点: 基于即将废弃的TransportClient, 不能支持复杂的业务

4.1.4 Rest Client (最后为了对原有框架的低侵入性,选择这种方案)

REST Client官方文档
Java REST Client官方API

image.png

官方给出来的REST Client有Java Low Level REST Client和Java Hight Level REST Client两个,前者兼容所有版本的ES,后者是基于前者开发出来的,只暴露了部分API,待完善。这个案例中使用Java Low Level REST Client,有如下的一些特点:

  • 最小化依赖;
  • 提供跨所有可用节点的负载平衡;
  • 提供节点故障和特定响应代码时的故障转移;
  • 提供失败重连的惩罚机制(是否对一个连接失败的节点尝试重连,取决于它连续失败的次数,尝试重连且失败的次数越多,客户端在再次尝试重连这个节点时等的时间就越长。说那么多,太复杂了,其实给一个场景就是:我找你玩儿,你不答应,我伤自尊了,下次去找你我隔了一个星期再去找你,你又不答应,我又伤自尊了,下次再找你的话,那我就隔两个星期,依次类推);
  • 持久连接;
  • 跟踪请求和响应的日志记录;
  • 可选的集群节点自动发现功能;

官方推这个REST Client,个人还是觉得是因为它是基于HTTP端口去通信的,便于操作,而且跟ES版本几乎没有关系。

image.png

elasticsearch-rest-client Maven 仓库(5.6以上版本)
elasticsearch.client rest Maven仓库(5.0~5.5版本)
【注】此处的版本和安装的es集群的版本一致

连接es5.5 成功
使用org.elasticsearch.client5.51版本,(使用5.6版本也可以,其他版本自行测试)

<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/rest -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>rest</artifactId>
        <version>5.5.1</version>
</dependency>

【注】注意使用REST Client连接的是9200端口

public class RestClientTest {
    public static void main(String[] args) {

        // 步骤一:创建 RestClient 对象
        RestClient restClient = RestClient.builder(new HttpHost("公网地址", 9200)).build();

        // 步骤二:发起请求
        try {

            //index a document 往ES索引增加一条数据
            HttpEntity entity = new NStringEntity("{\n\"book_id\":\"0001\",\n\"name\":\"Alice in Wonderland\"\n}",
                    ContentType.APPLICATION_JSON);
            Response indexResponse = restClient.performRequest(
                    "PUT",
                    "/index_test/book/0001",
                    Collections.<String, String>emptyMap(),
                    entity);

            //search a document 检索ES数据
            Response response = restClient.performRequest("GET", "/index_test/book/0001",
                    Collections.singletonMap("pretty", "true"));
            System.out.println(EntityUtils.toString(response.getEntity()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意 High Level Client能够向上兼容,例如6.3.2版本的elasticsearch-rest-high-level-client能确保与大于等于6.3.2版本的Elasticsearch集群通信。为了保证最大程度地使用最新版客户端的特性,推荐High Level Client版本与集群版本一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容