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文件依赖图

抄作业的同学看这里

<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,一些基本操作后续博客会更新,

启动类源代码:

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)};@Beforepublic void init(){client = new RestHighLevelClient(RestClient.builder(httpHosts));}@Afterpublic void close() {try {//判断空值关闭if (ObjectUtil.isNotEmpty(client)) {client.close();}} catch (Exception e) {e.printStackTrace();}}/*** 添加测试*/@Testpublic void creat() throws IOException {HashMap<String,Object> map = new HashMap<>();map.put("name","董老六");map.put("content","中国必胜");//指定索引和idIndexRequest indexRequest = new IndexRequest("ik").id("5").source(map);//执行请求,第二个参试数枚举,直接用defaultIndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);}
}

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java23种设计模式

本文主要是对Java中一些常用的设计模式进行讲解 后期会进行不断的更新&#xff0c;欢迎浏览 23种设计模式 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。结构型模式&#xff0c;共七种&#xff1a;适配器模式、桥接…

使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流

使用 Flume 将 CSV 数据导入 Kafka&#xff1a;实现实时数据流 文介绍了如何使用 Apache Flume 将 CSV 格式的数据从本地文件系统导入到 Apache Kafka 中&#xff0c;以实现实时数据流处理。通过 Flume 的配置和操作步骤&#xff0c;我们可以轻松地将数据从 CSV 文件中读取并发…

RT-Thread下使用NTP服务器获取时间并同步到硬件RTC

单片机:STM32F407VET6 实现功能:通过ntp服务器获取时间并同步到硬件RTC上 1.配置NTP相关参数 1.1打开netutils相关软件包 1.2 关闭软件RTC相关配置 参考资料:RT-Thread中使用NTP自动更新时间_rtthread ntp-CSDN博客 2.配置硬件RTC 2.1 在ENV里面使能硬件RTC 2.2使用STM32C…

日志服务 HarmonyOS NEXT 日志采集最佳实践

作者&#xff1a;高玉龙&#xff08;元泊&#xff09; 背景信息 随着数字化新时代的全面展开以及 5G 与物联网&#xff08;IoT&#xff09;技术的迅速普及&#xff0c;操作系统正面临前所未有的变革需求。在这个背景下&#xff0c;华为公司自主研发的鸿蒙操作系统&#xff08…

idea maven 打包 内存溢出 报 GC overhead limit exceeded -> [Help 1]

idea 使用maven打包 报GC overhead limit exceeded -> [Help 1] 解决方法&#xff1a; 打开settings -> 点开如同所示 将 vm Options 参数 设为 -Xmx8g

双链表算法库构建

v1.0 : 模仿贺利坚老师, 进行基本构建 贺老师链接:数据结构之自建算法库——双链表_双链表画法-CSDN博客 我的解析博客:双链表的存储结构_p (*q)->next;-CSDN博客 库函数: //(1)初始化双链表 void InitDoubleLinkList(DoubleLinkList *&L);//(2)输出双链表 void Dispal…

Pots(DFS BFS)

//新生训练 #include <iostream> #include <algorithm> #include <cstring> #include <queue> using namespace std; typedef pair<int, int> PII; const int N 205; int n, m; int l; int A, B, C; int dis[N][N];struct node {int px, py, op…

解决虚拟机centos8无法连接外网,ping: www.baidu.com: 未知的名称或服务

设置的虚拟机刚开还是好好的&#xff0c;改完hostname重启后就连不上网了 ping百度时显示未知的名称或服务。 1.找到虚拟机的IP(NAT模式的) 编辑-->虚拟网络编辑器 可以看到我的子网IP为192.168.47.0 2.编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-XXXXX…

SpringCloud学习(1)-consul

consul下载安装及使用 1.consul简介 Consul是一种开源的、分布式的服务发现和配置管理工具&#xff0c;能够帮助开发人员构建和管理现代化的分布式系统。它提供了一套完整的功能&#xff0c;包括服务注册与发现、健康检查、KV存储、多数据中心支持等&#xff0c;可以帮助开发人…

Redis的高可用(主从复制、哨兵模式、集群)的概述及部署

目录 一、Redis主从复制 1、Redis的主从复制的概念 2、Redis主从复制的作用 ①数据冗余&#xff1a; ②故障恢复&#xff1a; ③负载均衡&#xff1a; ④高可用基石&#xff1a; 3、Redis主从复制的流程 4、Redis主从复制的搭建 4.1、配置环境以及安装包 4.2所有主机…

设计模式-行为型-中介者模式-Mediator

同事抽象类 public abstract class Colleague {private Mediator mediator;public abstract void play(String data); } 视频同事 public class AudioColleague extends Colleague {public void play(String data) {System.out.println("画外音是&#xff1a;" d…

最新408试卷分析+备考经验分享

408出题再糟糕&#xff0c;你是不是还是要考&#xff1f; 别管出题人出多刁钻的题&#xff0c;大家拿到的卷子都是一样的&#xff0c;要难就都难&#xff0c;要刁钻就一起g... 所以再潜心钻研出题规律或出题套路&#xff0c;不如多花些时间去多复习巩固几遍知识点&#xff01…

3D雷达和相机联合标定:一种灵活且精确的基于目标的外参标定方法

3D雷达和相机联合标定&#xff1a;一种灵活且精确的基于目标的外参标定方法 论文链接&#xff1a;https://arxiv.org/pdf/2307.15264.pdf 附赠自动驾驶学习资料和量产经验&#xff1a;链接 摘要 本文介绍了3D雷达和相机联合标定&#xff1a;一种灵活且精确的基于目标的外参…

WPF中动画教程(DoubleAnimation的基本使用)

实现效果 今天以一个交互式小球的例子跟大家分享一下wpf动画中DoubleAnimation的基本使用。该小球会移动到我们鼠标左键或右键点击的地方。 该示例的实现效果如下所示&#xff1a; 页面设计 xaml如下所示&#xff1a; <Window x:Class"AnimationDemo.MainWindow&qu…

vue使用iview导航栏Menu activeName不生效

activeName不生效 一、问题一、解决方案&#xff0c; 一、问题 根据ivew官网的提示&#xff0c;设置了active-name和open-names以后&#xff0c;发现不管是设置静态是数据还是设置动态的数据&#xff0c;都不生效 一、解决方案&#xff0c; 在设置动态名称的时候&#xff0c…

【Erlang】Linux(CentOS7)安装Erlang和RabbitMQ

一、系统环境 查版本对应&#xff0c;CentOS-7&#xff0c;选择Erlang 23.3.4&#xff0c;RabbitMQ 3.9.16 二、操作步骤 安装 Erlang repository curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash安装 Erlang package s…

【SpringCloud】Ribbon 负载均衡

目 录 一.负载均衡原理二.源码跟踪1. LoadBalancerIntercepor2. LoadBalancerClient3. 负载均衡策略 IRule4. 总结 三.负载均衡策略1.负载均衡策略2.自定义负载均衡策略 四.饥饿加载 在 order-service 中 添加了 LoadBalanced 注解&#xff0c;即可实现负载均衡功能&#xff0c…

【Error】Uncaught TypeError: Cannot read properties of undefined (reading ‘get’)

报错原因&#xff1a; 返回值为undefined 解决&#xff1a; vue3可用&#xff1f;

RUST语言变量与数据类型使用

使用之前了解: fn main() 表示程序入口点 println!("要输出的内容"); 表示格式化输出 变量与常量声明: let 变量:变量类型 变量值;let mut 变量:变量类型 变量值; const 常量:常量类型 常量值 如果 声明时不指定类型,将根据赋值类型自动推导 变量类型参与下…

wife_wife【web 攻防世界】

大佬的wp:WEB&#xff1a;Wife_wife-CSDN博客 知识点&#xff1a; prototype是new class 的一个属性&#xff0c;即__proto__指向new class 的prototype属性__proto__如果作为json代码解析的话会被当成键名处理&#xff0c;但是如果是在类中的话则会被当成子类的原型 如let o…