当前位置: 首页 > news >正文

[elastic 8.x]java客户端连接elasticsearch与操作索引与文档

初始化客户端

引入相关依赖

<dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.10.2</version>
</dependency>

初始化客户端

为了方便演示,我关闭了elasticsearch的安全验证,带安全验证的初始化方式将在最后专门介绍

String serverUrl="http://127.0.0.1:9200";
RestClient restClient=RestClient.builder(HttpHost.create(serverUrl)).build();
ElasticsearchTransport transport=new RestClientTransport(restClient,new JacksonJsonpMapper());
ElasticsearchClient esClient=new ElasticsearchClient(transport);

索引

创建索引

    void createIndex(){String mappings = "{\n" +"  \"properties\" : {\n" +"    \"id\" : {\n" +"      \"type\" : \"keyword\" \n" +"    },\n"+"    \"name\" : {\n" +"      \"type\" : \"text\",\n" +"      \"fields\" : {\n" +"        \"keyword\" : {\n" +"          \"type\" : \"keyword\",\n" +"          \"ignore_above\" : 256 \n" +"        }\n" +"      } \n" +"    }, \n" +"    \"price\" : { \n" +"      \"type\" : \"long\" \n" +"     } \n" +"  }\n" +"}\n";JsonpMapper mapper=esClient._transport().jsonpMapper();JsonParser parser= Json.createParser(new StringReader(mappings));CreateIndexRequest createIndexRequest=new CreateIndexRequest.Builder().index("test").mappings(TypeMapping._DESERIALIZER.deserialize(parser,mapper)).build();try {esClient.indices().create(createIndexRequest);} catch (IOException e) {throw new RuntimeException(e);}}

删除索引

    void deleteMapping(){try {DeleteIndexResponse response;response= esClient.indices().delete(deleteIndexRequest->deleteIndexRequest.index("test"));System.out.println(response.toString());} catch (IOException e) {throw new RuntimeException(e);}}

判断索引是否存在

    void existsIndex(){try {BooleanResponse hotel = esClient.indices().exists(existsIndexRequest -> existsIndexRequest.index("hotel"));System.out.println(hotel.value());} catch (IOException e) {throw new RuntimeException(e);}}

文档

新增文档

    void insertDoc(){Hotel hotel=hotelService.getById(61083L);HotelDoc hotelDoc=new HotelDoc(hotel);IndexRequest<HotelDoc> request=new IndexRequest.Builder<HotelDoc>().id("11").index("hotel").document(hotelDoc).build();try {IndexResponse index = esClient.index(request);System.out.println(index.id());} catch (IOException e) {throw new RuntimeException(e);}}

其中,HotelDoc是一个实体类

删除文档

    void deleteDoc(){try {esClient.delete(deleteRequest->deleteRequest.index("hotel").id("11"));} catch (IOException e) {throw new RuntimeException(e);}}

查询文档

    void searchDoc(){TermQuery termQuery= QueryBuilders.term().field("_id").value("11").build();SearchRequest request=new SearchRequest.Builder().index("hotel").query(termQuery._toQuery()).build();try {SearchResponse<HotelDoc> response=esClient.search(request,HotelDoc.class);//输出结果for(Hit<HotelDoc> hit:response.hits().hits()){System.out.println(hit.source());}} catch (IOException e) {throw new RuntimeException(e);}}

更新文档

    void updateDoc(){HotelDoc hotelDoc=new HotelDoc();//需要更新哪个字段就赋值哪个字段hotelDoc.setCity("xx");try {esClient.update(updateRequest->updateRequest.index("hotel").id("11").doc(hotelDoc),HotelDoc.class);} catch (IOException e) {throw new RuntimeException(e);}}

批量导入文档

    void insertMany(){List<Hotel> hotels=hotelService.list();List<HotelDoc> hotelDocs=hotels.stream().map(HotelDoc::new).collect(Collectors.toList());BulkRequest.Builder bl=new BulkRequest.Builder();for(HotelDoc hotelDoc:hotelDocs){bl.operations(op->op.index(idx->idx.index("hotel").id(hotelDoc.getId().toString()).document(hotelDoc)));}try {esClient.bulk(bl.refresh(Refresh.WaitFor).build());} catch (IOException e) {throw new RuntimeException(e);}}

连接Https集群

带安全验证的连接有点复杂,将下列代码中CA证书的位置改为实际所在的位置就行了。

通过用户名密码连接

password为elastic的密码,可以在我的另一篇文章中查看密码的重置方式
Docker安装部署[8.x]版本Elasticsearch+Kibana+IK分词器

    void makeConnection_https() throws CertificateException, IOException,NoSuchAlgorithmException, KeyStoreException, KeyManagementException {// 创建凭据提供器final CredentialsProvider credentialsProvider =new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("elastic", password));// 设置CA证书路径Path caCertificatePath = Paths.get("E:\\tools\\elasticsearch-8.10.2\\config\\certs\\http_ca.crt");// 创建证书工厂CertificateFactory factory =CertificateFactory.getInstance("X.509");Certificate trustedCa;try (InputStream is = Files.newInputStream(caCertificatePath)) {// 从输入流中生成证书trustedCa = factory.generateCertificate(is);}// 创建密钥库KeyStore trustStore = KeyStore.getInstance("pkcs12");trustStore.load(null, null);trustStore.setCertificateEntry("ca", trustedCa);// 创建SSL上下文构建器SSLContextBuilder sslContextBuilder = SSLContexts.custom().loadTrustMaterial(trustStore, null);final SSLContext sslContext = sslContextBuilder.build();// 构建Rest客户端构建器RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setSSLContext(sslContext).setDefaultCredentialsProvider(credentialsProvider);}});// 构建Rest客户端RestClient restClient = builder.build();// 创建Rest客户端传输ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());esClient = new ElasticsearchClient(transport);
//        asyncClient = new ElasticsearchAsyncClient(transport);}

通过ApiKey连接

ApiKey在Kibana的Security下生成

     void makeConnection_token() throws CertificateException, IOException,NoSuchAlgorithmException, KeyStoreException, KeyManagementException {// 定义CA证书路径Path caCertificatePath = Paths.get("E:\\tools\\elasticsearch-8.10.2\\config\\certs\\http_ca.crt");// 创建X.509证书工厂CertificateFactory factory =CertificateFactory.getInstance("X.509");Certificate trustedCa;try (InputStream is = Files.newInputStream(caCertificatePath)) {// 从输入流中生成X.509证书trustedCa = factory.generateCertificate(is);}// 创建PKCS12密钥库KeyStore trustStore = KeyStore.getInstance("pkcs12");trustStore.load(null, null);// 将CA证书添加到密钥库trustStore.setCertificateEntry("ca", trustedCa);// 创建SSL上下文构建器,并设置信任材料SSLContextBuilder sslContextBuilder = SSLContexts.custom().loadTrustMaterial(trustStore, null);final SSLContext sslContext = sslContextBuilder.build();// 创建Rest客户端构建器RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setSSLContext(sslContext);}});// 设置默认请求头Header[] defaultHeaders =new Header[]{new BasicHeader("Authorization","ApiKey yourApiKey")};builder.setDefaultHeaders(defaultHeaders);// 构建Rest客户端RestClient restClient = builder.build();// 创建基于RestClient的传输方式ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());// 创建Elasticsearch客户端esClient = new ElasticsearchClient(transport);}

相关文章:

[elastic 8.x]java客户端连接elasticsearch与操作索引与文档

初始化客户端 引入相关依赖 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.10.2</version> </dependency>初始化客户端 为了方便演示&#xff0c;我关闭了ela…...

接口测试总结

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1…...

计算机基础知识44

overflow溢出属性 visible&#xff1a;默认值&#xff0c;内容不会被修剪&#xff0c;会呈现在元素框之外。hidden&#xff1a;内容会被修剪&#xff0c;并且其余内容是不可见的。scroll&#xff1a;内容会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。auto: …...

【StringBuilder和StringBuffer】

文章目录 StringBuilder和StringBufferString类、StringBuilder和StringBuffer的区别 StringBuilder和StringBuffer的区别StringBuilder 字符串逆置 StringBuilder和StringBuffer String类、StringBuilder和StringBuffer的区别 String类的特点是不可变性&#xff0c;所以Stri…...

用java代码实现security

Java中security的实现主要涉及到以下几个方面&#xff1a; 认证(Authentication) 认证是确认用户身份的过程&#xff0c;Java中提供了不同的认证机制来保护应用程序不被未授权的用户访问。常用的认证机制有以下几种&#xff1a; 基于口令的认证&#xff1a;要求用户输入用户名…...

【Java 进阶篇】Java Session 原理及快速入门

大家好&#xff0c;欢迎来到本篇博客。今天&#xff0c;我们将探讨Java Web开发中一个重要而令人兴奋的概念&#xff0c;即Session&#xff08;会话&#xff09;。Session是一种在Web应用程序中跟踪用户状态和数据的机制。我们将深入了解Session的原理&#xff0c;并通过示例来…...

MoveFunsDAO 星航计划|从Move入门Web3与深入实践「公益课堂」

Move 语言作为最安全的编程语言之一&#xff0c;在资产的安全性和保护方面有着显著优势&#xff0c;被寄予引领 Web3 世界的全新叙事的厚望。 随着 Sui 在今年五月主网上线&#xff0c;它为 Move 生态带来一股新的浪潮。上线以来&#xff0c;Sui 公链的开发活跃度持续数月位居…...

RabbitMQ常用命令(一)

启动和关闭 1、启动RabbitMQ rabbitmq-server start & 注意&#xff1a;这里可能会出现错误&#xff0c;错误原因是/var/lib/rabbitmq/.erlang.cookie文件权限不够。 解决方案对这个文件授权 chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie chmod 400 /va…...

在教育领域,AI垂直大模型应用场景总结!

1. 智能教育助手&#xff1a; 这种模型可以通过语音或文本与学生进行交互&#xff0c;提供个性化的学习建议和答疑解惑。根据学生的学习习惯和知识水平&#xff0c;推荐适合的学习资源&#xff0c;并提供实时的辅导和反馈。 2. 智能作文批改助手&#xff1a; 这种模型可以对…...

基于级联广义积分器(CGI)的谐波信号提取MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 此方法可用于信号检测、虚拟阻抗合成、锁相环等方面。 在现有的信号提取方法中&#xff0c;众多学者采用了SOGI法、LPF法以及正交信号发生器等方法。当输入信号中不存在直流分量&#xff0c;只有谐波分量时&…...

Linux--线程-条件控制实现线程的同步

1.条件变量 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时&#xff0c;允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量&#xff0c;其他线程在获…...

flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer

文章目录 问题描述问题原因解决方法 问题描述 The instance member ‘widget’ can’t be accessed in an initializer. 问题原因 “The instance member ‘widget’ can’t be accessed in an initializer” 错误是因为在初始化器列表中&#xff08;constructor initializer…...

spring项目详细结构目录

这里写目录标题 一、项目结构1、model模型类Student2、mapper 数据访问层接口和映射文件接口类StudentMapper接下来创建名为 StudentMapper.xml 的映射文件 3、service 服务层接口和实现类创建名为 StudentService 的 Java 接口创建名为 StudentServiceImpl 的实现类 4、contro…...

Cygwin 和MinGW 的区别与联系

Cygwin&#xff0c;是Cygnus出品&#xff0c;被Red Hat公司收购&#xff0c;名下的项目&#xff0c;目的为提供运行于windows平台的类Unix环境&#xff08;以GNU工具为代表&#xff09;。Cygwin提供了抽象层dll&#xff0c;用于将部分POSIX转换为Windows API调用&#xff0c;目…...

WebSocket Day03 : SpringMVC整合WebSocket

前言 在现代Web应用程序中&#xff0c;实时性和即时通信变得越来越重要。传统的HTTP请求-响应模式无法满足实时数据传输和双向通信的需求。随着技术的发展&#xff0c;WebSocket成为了一种强大而灵活的解决方案。 WebSocket是HTML5提供的一种新的通信协议&#xff0c;它通过一…...

Electron + VUE3 桌面应用,主进程和渲染进程通信

之前写过篇主进程和渲染进程之间的通信,这里主要是记录一下VUE版本的应用,主进程和渲染进程之间的通信。思路是一样,唯一不同的是代码。 在开发Electron应用的时候,从安全的角度来考虑,尽量不要在渲染进程中,直接调用ElectronAPI,因此我们需要预加载JS脚本,在这个脚本…...

使用腾讯云轻量服务器安装AList

新人有免费两个月试用轻量服务器&#xff0c;使用云服务器商自带的webshell登录&#xff1b; 我这儿用docker安装Alist&#xff0c;因为服务器没自带docker&#xff0c;所以具体安装docker centos7.0最快速安装docker的方法 通过 Docker 部署 Alist 命令&#xff1a; docke…...

边缘计算助力低速无人驾驶驶入多场景落地快车道

自动驾驶刮起的风&#xff0c;如今正吹向低速无人驾驶赛道。近期不完全统计显示&#xff0c;当前A股及港股正在排队IPO的自动驾驶相关企业共有12家&#xff0c;其中实现盈利的企业仅两家&#xff0c;而且实现盈利的两家企业最主要的收入并不完全源于自动驾驶领域。 相比之下&am…...

谷歌推出基于AI的产品图像生成工具;[微软免费课程:12堂课入门生成式AI

&#x1f989; AI新闻 &#x1f680; 谷歌推出基于AI的产品图像生成工具&#xff0c;帮助商家提升广告创意能力 摘要&#xff1a;谷歌推出了一套基于AI的产品图像生成工具&#xff0c;使商家能够利用该工具免费创建新的产品图像。该工具可以帮助商家进行简单任务&#xff08;…...

python学习10

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...