美文网首页spring搜索引擎
SpringBoot实战系列之集成es

SpringBoot实战系列之集成es

作者: 程序员小白成长记 | 来源:发表于2020-04-24 21:19 被阅读0次

    一、前言

    对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版本与集群版本一致。

    相关文章

      网友评论

        本文标题:SpringBoot实战系列之集成es

        本文链接:https://www.haomeiwen.com/subject/wfraihtx.html