SpringBoot集成Elasticsearch8.x(9)|(RestClient实现Elasticsearch DSL操作)

SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch DSL的操作)


文章目录

  • SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch DSL的操作)
    • @[TOC]
  • 前言
  • 一、DSL 介绍
  • 二、初始化客户端
  • 三、封装RestClient dsl执行
  • 三、更新
    • 1.实用script更新es中数据
  • 总结

章节
第一章链接: SpringBoot集成Elasticsearch7.x(1)|(增删改查功能实现)
第二章链接: SpringBoot集成Elasticsearch7.x(2)|(复杂查询)
第三章链接: SpringBoot集成Elasticsearch7.x(3)|(aggregations之指标聚合查询)
第四章链接: SpringBoot集成Elasticsearch7.x(4)|(aggregations之分桶聚合查询)
第五章链接: SpringBoot集成Elasticsearch7.x(5)|(term、match、match_phrase区别)
第六章链接: SpringBoot集成Elasticsearch8.x(6)|(新版本Java API Client使用)
第七章链接: SpringBoot集成Elasticsearch8.x(7)|(新版本Java API Client使用完整示例)
第八章链接:SpringBoot集成Elasticsearch8.x(8)|(新版本Java API Client的Painless语言脚本script使用)
第九章链接:SpringBoot集成Elasticsearch8.x(9)|(RestClient实现Elasticsearch的操作)

前言

Elasticsearch curl命令
-XGET一种请求方法
-d 标识以post形式传入参数 ,写在请求正文里面
?pretty=true 以格式的形式显示结果
curl -XGET http://localhost:9200/_cluster/health?pretty --查询elasticsearch的健康信息
curl -XGET http://localhost:9200/ --查询实例的相关信息
curl -XGET http://localhost:9200/_cluster/nodes/ --得到集群中节点的相关信息
curl -XPOST http://localhost:9200/_cluster/nodes/_shutdown --关闭整个集群
curl -XPOST http://localhost:9200/_cluster/nodes/aaaa/_shutdown --关闭集群中指定节点
curl -XPOST http://localhost:9200/test --创建名为test的索引
curl -XDELETE http://localhost:9200/test --删除名为test的索引
curl -XGET ‘http://10.10.110.2:19200/benlaitest/_search?pretty=true’ -d ‘{“query”:{“multi_match”:{“query”:“法国”,“fields”:[“firstname”,“lastname”]}}}’ --查询数据(匹配firstname和lastname)
curl http://10.10.110.160:9200/benlaitest/_analyze?analyzer=standard -d 我爱你中国
postman执行请求API:
http://10.10.110.160:9200/_cat/indices?v – Get请求 查看有多少索引
http://10.10.110.160:9200/benlaitest/_analyze?analyzer=standard --查看分词结果

一、DSL 介绍

Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。

简单实用

//查询所有的商品
GET /product_index/product/_search
{"query": {"match_all": {}
}
//查询商品名称包含 milk 的商品,同时按照价格降序排序
GET /product_index/product/_search
{"query": {"match": {"product_name": "milk"}},"sort": [{"price": "desc"}]
}

二、初始化客户端

简单实用

    @Beanprivate RestClient buildClient(EsClientProperties properties, HttpHost[] hostList) {int timeout = properties.getTimeout() == 0 ? 5000 : properties.getTimeout();String authorization = String.format("Basic %s", Base64.getEncoder().encodeToString(String.format("%s:%s", properties.getUser(), properties.getPwd()).getBytes(StandardCharsets.UTF_8)));Header[] headers = new Header[]{new BasicHeader("Authorization", authorization)};return RestClient.builder(hostList).setDefaultHeaders(headers).setRequestConfigCallback((rc) -> {return rc.setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).setSocketTimeout(timeout);}).build();}

三、封装RestClient dsl执行

  /*** 查询所有的索引信息*/@Testpublic void searchIndices() {RestClient client = EsConfig.initClient();Request request = new Request("GET", "/_cat/indices?v");try {Response response = client.performRequest(request);System.out.println(EntityUtils.toString(response.getEntity()));} catch (IOException exception) {LOGGER.info(exception.getMessage());} finally {try {client.close();} catch (IOException exception) {LOGGER.info(exception.getMessage());}}}/*** 根据索引id查询索引信息*/@Testpublic void searchIndexById() {RestClient client = EsConfig.initClient();Request request = new Request("Get", "/20220325001/");try {Response response = client.performRequest(request);System.out.println(EntityUtils.toString(response.getEntity()));} catch (IOException exception) {LOGGER.info(exception.getMessage());} finally {try {client.close();} catch (IOException exception) {LOGGER.info(exception.getMessage());}}}/*** 根据条件查询*/public void queryMatch() throws IOException {RestClient client = EsConfig.initClient();Request request = new Request("POST", "/20220325001/_search?filter_path=hits");request.setJsonEntity(" {\n" +"    \"query\":{\n" +"        \"match_all\":{\n" +"            \n" +"        }\n" +"    }\n" +"}");Response response = client.performRequest(request);System.out.println(EntityUtils.toString(response.getEntity()));client.close();}

三、更新

1.实用script更新es中数据

模板数据

{"script": {"source": "ctx._source.props.versionList.add(params.newElement)","lang": "painless","params": {"newElement": "NEW_VERSION"}},"query": {"bool": {"must": [{"terms": {"props.versionList": ["FROM_VERSION"]}},{"term": {"dbName": "DB_NAME"}}]}}
}{"script": {"source": "ctx._source.props.versionList.removeAll(Collections.singleton(params.valueToRemove))","lang": "painless","params": {"valueToRemove": "TARGET_VERSION"}},"query": {"terms": {"_id": "VECTOR_ID_LIST"}}
}

scritp模板使用

    private String buildDeleteVersionDsl(List<String> vectorIds, Integer version) {return versionDelDslTemplate.replaceAll("\"VECTOR_ID_LIST\"", JSONObject.toJSONString(vectorIds)) //.replaceAll("\"TARGET_VERSION\"", version.toString());}

统一调用方法

private String performRequest(String method, String path, String jsonParam) throws IOException {Request request = new Request(method, path);if (StringUtils.isNotBlank(jsonParam)) {request.setEntity(new NStringEntity(jsonParam, ContentType.APPLICATION_JSON));}LOGGER.debug("es request: method:{}, path:{}, param:{}", new Object[]{method, path, jsonParam});Response response;try {response = this.restClient.performRequest(request);} catch (IOException var8) {LOGGER.error("es server exception:{}.\n dsl:{}\n", var8.getMessage(), jsonParam);throw new RuntimeException(var8);}LOGGER.debug("es response:{}", response);int statusCode = response.getStatusLine().getStatusCode();String msg;if (statusCode >= 200 && statusCode < 300) {msg = EntityUtils.toString(response.getEntity());LOGGER.debug("es response content:{}", msg);return msg;} else {msg = String.format("Error when request:%s, response:%s ", request, response);LOGGER.error("es server error:{}.\n, dsl:{}\n", msg, jsonParam);throw new RestException(statusCode, msg);}}

总结

以上就是elasticsearch RestClient 中使用script对数据镜像批量跟新的操作,语法熟悉了操作起来还是很简单的。

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

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

相关文章

InsCode:CSDN的创新代码分享平台,融合AI技术提升编程体验

InsCode AI Chat 能够让你通过聊天的方式帮你优化代码。 一&#xff1a;前言 InsCode 是csdn推出的一个代码分享网站 二、使用 AI 辅助完成代码 下面我们就从实践出发&#xff0c;基于 InsCode 的 AI辅助编程&#xff0c;写Python实现的计算器。 1.基于模板创建项目 这里我…

关于SQL注入问题及解决--小记

1.SQL注入问题 SQL 注入是一种常见的安全漏洞&#xff0c;它发生在应用程序未正确验证和处理用户提供的输入数据时。攻击者可以通过恶意构造的输入&#xff0c;将额外的 SQL 代码注入到应用程序的查询语句中&#xff0c;从而执行未经授权的数据库操作。 SQL 注入问题通常出现…

行业地位失守,业绩持续失速,科沃斯的故事不好讲

特劳特曾在《定位》一书中提到&#xff0c;为了在容量有限的消费者心智中占据品类&#xff0c;品牌最好的差异化就是成为第一&#xff0c;做品类领导者或开创者&#xff0c;销量遥遥领先&#xff1b;其次分化品类&#xff0c;做到细分品类的唯一&#xff0c;即细分品类的第一。…

Elon Musk艾隆・马斯克的聊天机器人Grok上线可以使用啦,为X Premium Plus订阅者推出

艾隆・马斯克旗下的 AI 初创公司X&#xff08;前身“推特”&#xff09;开发的 ChatGPT 竞争对手 Grok 已经在 X 平台上正式推出。Grok 是一个基于生成模型 Grok-1的聊天机器人&#xff0c;它能够回答问题并提供最新的信息。与其他聊天机器人不同&#xff0c;Grok 可以实时获取…

Java基础-IDEA下载、卸载、安装、使用

目录 1. IDEA下载2. IDEA卸载3. IDEA安装4. 基本使用 1. IDEA下载 IDEA下载网址 2. IDEA卸载 3. IDEA安装 更改IDEA安装目录 是否创建桌面图标 下一步 success&#xff01; 4. 基本使用 新建项目 新建模块 新建包 新建Java文件 编写代码 运行测试

2020蓝桥杯c组纸张大小

题目名字 纸张大小 题目链接 题意 给一张纸&#xff0c;通过不断折叠&#xff0c;求最终长宽&#xff0c;给十个数字&#xff0c;输入哪个数字就求哪次折叠的长宽&#xff0c;其实就是&#xff0c;每次折叠后长度的一半变为宽度&#xff0c;原来的宽度变成长度 思路 因为数字…

python之马尔科夫链(Markov Chain)

马尔可夫链&#xff08;Markov Chain&#xff09;是一种随机过程&#xff0c;具有“马尔可夫性质”&#xff0c;即在给定当前状态的条件下&#xff0c;未来状态的概率分布仅依赖于当前状态&#xff0c;而与过去状态无关。马尔可夫链在很多领域都有广泛的应用&#xff0c;包括蒙…

【C语言】网络字节序和主机字节序

网络字节序和主机字节序是计算机中字节的两种排序方式&#xff0c;它们主要用于解决不同计算机之间数据通信的问题。 一、网络字节序 也被称为大端字节序&#xff0c;是一种标准的字节序。在网络通信中&#xff0c;如果两台主机的字节序不同&#xff0c;可能会导致数据解释的二…

Swagger提示请确保swagger资源接口正确

问题描述 在项目开发过程中集成swagger-bootstrap-ui&#xff0c;打开swagger-ui.html页面正常&#xff0c;但是打开doc.html页面提示"请确保swagger资源接口正确"。 原因分析&#xff1a; 原因是JSON格式非法&#xff0c;一般出现此情况时&#xff0c;是因为后端…

shell条件测试

1.1.用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&#xff0c;Linux Shell提供了一组测试运算符. 通过这些运算符&#xff0c;shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句&#xff0c;例如判断语句和循环语句中发挥了…

数据分析实例:基于电力大数据的中小型企业运营发展分析

前不久&#xff0c;帆软发起了【2023BI数据分析大赛】的活动&#xff0c;老李我也是这个大赛的评委。   今天跟大家分享的是基于电力大数据的中小型企业运营发展分析。 当我们去解读一份数据分析报告时&#xff0c;首先要了解这份报告的主要目的是什么&#xff0c;作者通过分…

第19关 5.2k star 开源分布式存储服务Rancher-Longhorn在k8s上部署

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 什么是Longhorn Longhorn是一个轻量级、可靠且易于使用的Kubernetes分布式块存储系统。 Longhorn 是免费的开源软件。它最初由 Rancher Labs 开发&#xff0c;现在作为云原生计算基金会的孵…

X86汇编语言:从实模式到保护模式(代码+注释)--c7

X86汇编语言&#xff1a;从实模式到保护模式&#xff08;代码注释&#xff09;–c6 ;代码清单7-1;文件名&#xff1a;c07_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-4-13 18:02jmp near startmessage db 123...100start:mov ax,0x7c0 …

class061 最小生成树【算法】

class061 最小生成树【算法】 2023-12-8 11:48:12 算法讲解061【必备】最小生成树 code1 P3366 【模板】最小生成树 // Kruskal算法模版&#xff08;洛谷&#xff09; // 静态空间实现 // 测试链接 : https://www.luogu.com.cn/problem/P3366 // 请同学们务必参考如下代码中…

【Linux】:线程(二)互斥

互斥与同步 一.线程的局部存储二.线程的分离三.互斥1.一些概念2.上锁3.锁的原理4.死锁 一.线程的局部存储 例子 可以看到全局变量是所有线程共享的&#xff0c;如果我们想要每个线程都单独访问g_val怎么办呢&#xff1f;其实我们可以在它前面加上__thread修饰。 这就相当于把g…

网络入门---网络编程初步认识和实践(使用udp协议)

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用&#xff0c;ip地址和MAC地址在网络通信时…

Python实现GUI图片浏览程序

Python实现GUI图片浏览程序 下面程序需要pillow库。pillow是 Python 的第三方图像处理库&#xff0c;需要安装才能实用。pillow是PIL&#xff08; Python Imaging Library&#xff09;基础上发展起来的&#xff0c;需要注意的是pillow库安装用pip install pillow&#xff0c;导…

【改进YOLOv8】融合可扩张残差(DWR)注意力模块的小麦病害检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着计算机视觉技术的快速发展&#xff0c;深度学习在图像识别和目标检测领域取得了巨大的突破。其中&#xff0c;YOLO&#xff08;You Only Look O…

基于SSM框架的网上商城系统的设计与实现

完整下载&#xff1a;基于SSM框架的网上商城系统的设计与实现 基于SSM框架的网上商城系统的设计与实现 "Design and Implementation of an Online Shopping Mall System Based on SSM Framework" 目录 目录 2 摘要 3 关键词 3 第一章 系统设计 4 1.1 系统需求分析 4 …

TruLens RAG Triad 学习

TruLens RAG Triad 学习 0. 背景1. RAG 三元组2. TruLens 快速入门2-1. 安装依赖2-2. 初始化 OpenAI 认证信息2-3. 获取数据2-4. 创建向量存储2-5. 从头构建自定义 RAG2-6. 设置反馈函数2-7. 构建应用程序2-8. 运行应用程序0. 背景 近年来,RAG 架构已成为为大型语言模型 (LLM…