ES学习日记(十)-------Java操作ES之连接客户端

Elasticsearch有两种连接方式: transport、rest。transport 通过TCP方式访问ES(只支持iava),rest 方式通过http API 访问ES(没有语言限制)。

ES官方建议使用Iest 方式,transport 在7.8 版本中不建议使用,在8.x的版本中废弃。你可以用Java客户端做很多事情:

执行标准的 index,get,delete,update,search等操作。

在正在运行的集群上执行管理任务。

但是,通过官方文档可以得知,现在存在至少三种Java客户端。
Transport Client
Java High Level REST Client
Java Low Level Rest client

造成这种混乱的原因是:

长久以来,ES并没有官方的Java客户端,并且Java白身是可以简单支持ES的API的,于是就先做成了Transportclient。但是Transportclient 的缺点是显而易见的,它没有使用RESTfuI风,格的接口,而是二进制的方式传输数据。

之后ES官方推出了 Java Low Level REST client,它支持RESTful,用起来也不错。但是缺点也很明显,因为Transportclient 的使用者把代码迁移到 Low Level REST client 的工作量比较大。官方文档专门为迁移代码出了一堆文档来提供参考。

现在ES官方推出 Java High Level REST client ,它是基于Java Low Level REST client 的封装,并且API接收参数和返回值和 Transportclient 是一样的,使得代码迁移变得容易并且支持了RESTful的风格,兼容了这两种客户端的优点。当然缺点是存在的,就是版本的问题。ES的小版本更新非常频繁,在最理想的情况下,客户端的版本要和ES的版本一致(至少主版本号一致),次版本号不一致的话,基本操作也许可以,但是新API就不支持了。

一、创建新项目,步骤为maven创建,增加依赖,编写测试类,这几步没啥好说的,直接上pom文件依赖图

抄作业的同学看这里

java 复制代码
<dependencies>
    <!-- elasticsearch服务依赖 -->
    <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>7.4.2</version>
    </dependency>
    <!-- rest-client客户端依赖 -->
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-client</artifactId>
      <version>7.4.2</version>
    </dependency>
    <!-- rest-high-level-client客户端依赖 -->
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>7.4.2</version>
    </dependency>
    <!-- junit单元测试依赖 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.6.2</version>
    </dependency>
  </dependencies>

因为是测试连接,建议直接抄作业就行,只是测试下能不能连上ES,一些基本操作后续博客会更新,

启动类源代码:

java 复制代码
package com.zhxd;

import cn.hutool.core.util.ObjectUtil;
import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.HashMap;

/**
 * Hello world!
 *
 * @author wht
 */
public class ElasticsearchApplication {
    private RestHighLevelClient client = null;
    /**
     * 连接方式
     */
    private final String SCHEME = "HTTP";


    /**
     * 准备httpHost,暂时单机,集群式修改此位置即可
     */
    HttpHost[] httpHosts = new HttpHost[]{
            new HttpHost("172.18.8.146",9200,SCHEME)
//            new HttpHost("172.18.8.146",9200,SCHEME),
//            new HttpHost("172.18.8.146",9200,SCHEME)
    };

    @Before
    public void init(){
        client = new RestHighLevelClient(RestClient.builder(httpHosts));
    }

    @After
    public void close() {
        try {
            //判断空值关闭
            if (ObjectUtil.isNotEmpty(client)) {
                client.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加测试
     */
    @Test
    public void creat() throws IOException {
        HashMap<String,Object> map = new HashMap<>();
        map.put("name","董老六");
        map.put("content","中国必胜");
        //指定索引和id
        IndexRequest indexRequest = new IndexRequest("ik").id("5").source(map);
        //执行请求,第二个参试数枚举,直接用default
        IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
    }
}

source的方式有很多种,常用的就两种

此次测试连接用map,连接之前的ik,其他关键信息都写在源码注释上了

测试成功后用head看一下,已经在里面了

相关推荐
宝绿特塑业再生科技11 分钟前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
geovindu43 分钟前
sql:SQL Pagination and Limiting Results using PorstgreSQL 18.0
大数据·数据仓库·sql·postgresql·数据库开发·数据库架构·1024程序员节
鲁邦通物联网2 小时前
PLC数据接入MES的边缘计算网关架构设计:别让MES直接理解控制变量
大数据·边缘计算·数据采集·工业数据采集·边缘计算网关·5g数采·plc数采
Never_every992 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
4SAPI2 小时前
AI 数据分析工具大模型 API 选型指南
大数据·人工智能·架构·php·1024程序员节
andrsted3 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
北京青蓝智慧马老师3 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能
Alsn864 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
欣欣之王来了5 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
云上先途5 小时前
开发专属 AI 工具,数据安全和隐私风险怎么规避?
大数据·人工智能·深度学习