spring搜索引擎

SpringBoot实战系列之集成es

2020-04-24  本文已影响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版本与集群版本一致。

上一篇 下一篇

猜你喜欢

热点阅读