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.pswp.cn/news/209850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209850.shtml
英文地址,請注明出處:http://en.pswp.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…