使用Java Rest Client操作Elasticsearch

2021-12-28 我是攻城師

Elasticsearch作為一個成熟的開源框架,對主流的多種客戶端語言都支持,比如Java,JavaScript ,PHP,.Net,Python,Ruby,CURL當然還有一些小眾的語言,雖然es官網沒支持,但是個人開發者也有一些開源的,具體的可在es官網clients地址查看:

https://www.elastic.co/guide/en/elasticsearch/client/index.html

開發過程中,基本最常用的就是Java和curl的方式了,因為es本身就是使用java語言開發的,所以對Java的支持應該是最到位了,此外es也支持rest ful的DSL的訪問方式,我們可以在linux上輕鬆的使用curl命令來對es進行增刪改查,curl的操作方式大多數都是臨時的,實際開發的我們還是用程式語言來訪問的:

es支持Java API的訪問方式,支持非常全面,唯一的缺點就是依賴有點多,代碼稍臃腫,有時候我們想簡單的開發一個非常小的功能,又不想使用java笨重的客戶端方式,應該怎麼辦?

上文說到es支持rest的訪問方式,那麼我們完全可以使用httpclient或者jsoup來直接發送http請求不就行了嗎?其實是可以的,使用httpclient和jsoup來發送curl的命令也能操作es,獲取結果。這裡面有一個需要注意的地方。

httpclient和jsoup都不直接支持發送DELETE方法帶參數的請求,這一點是個小缺陷,如果這個不支持,意味著一些刪除操作比如delete by query可能支持不太好。jsoup是完全不支持,而在httpclient裡面我們可以通過繼承重寫HttpEntityEnclosingRequestBase來滿足,刪除請求帶參數體,下面來看下如何使用:

繼承重寫的代碼:

然後使用httpclient發送一個刪除請求:

httpclient還是比較強大的,但是上面的代碼還是有點複雜,而且涉及連接的地方是有問題的,我們都知道es一般都是多臺機器組成集群,而使用原生的httpclient請求建立的連結只能是某一臺機器的ip這樣一來,如果這臺機器掛掉這個客戶端程序就完全不能使用了,所以風險還是比較大的,不過也不用擔心,es官網也提供了ES Java RestClient的方式來訪問es,這個庫底層用的也是httpclient的組件,只不過es官網做了封裝,支持多機器ip,以及對請求方法做了簡化,所以想減少項目的依賴,又對支持功能要求比較健壯,我們就可以使用這個庫來開發我們的業務。

官網文檔地址:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html

maven依賴:

下面來看下,如何使用ES的RestClient來操作ES:

總結:

ES官網提供的RestClient還支持nio實現的異步非阻塞的方式多線程多送請求,通過回調函數來處理響應的結果,當然了權限認證,超時中斷,失敗重試,線程數都有對應的設置選項,感興趣的朋友可自行查閱嘗試。

通過對比我們發現官網封裝的RestClient使用起來更加簡單和健壯,比起來沒有包裝的httpclient原生的方式更加符合生產環境的標準,對於不想熟悉標準的java api的es操作方法,又想通過java來訪問es的朋友們,RestClient是一個不錯的選擇。

有什麼問題可以掃碼關注微信公眾號:我是攻城師(woshigcs),在後臺留言諮詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。

相關焦點

  • Elasticsearch High Level Rest Client
    >elasticsearch-rest-high-level-client</artifactId> <version>7.9.1</version> <exclusions> <exclusion> <groupId>org.elasticsearch
  • SpringBoot 操作 ElasticSearch 詳解
    三、SpringBoot 項目引入 ElasticSearch 依賴下面介紹下 SpringBoot 如何通過 elasticsearch-rest-high-level-client 工具操作 ElasticSearch,這裡需要說一下,為什麼沒有使用 Spring 家族封裝的 spring-data-elasticsearch。
  • Java 操作 ElasticSearch,so easy!
    25.ElasticSearch Java API 概覽Java 操作 Es 的方案:直接使用 HTTP 請求,去操作 Es。這種方式使用起來更加直接。但是需要注意,這種方式,所使用的依賴庫的版本要和 Es 對應。TransportClient 在 Es7 中已經被棄用,在 Es8 中將被完全刪除。
  • SpringBoot 操作 ElasticSearch 詳解(萬字長文)
    三、SpringBoot 項目引入 ElasticSearch 依賴下面介紹下 SpringBoot 如何通過 elasticsearch-rest-high-level-client 工具操作 ElasticSearch,這裡需要說一下,為什麼沒有使用 Spring 家族封裝的 spring-data-elasticsearch。
  • Elasticsearch專題
    一條數據就是一個文檔,這個文檔用JSON作為載體ES安裝下載安裝包,解壓,修改elasticsearch.yml啟動啟動報錯ES啟動不能使用root用戶spring.application.name=springboot-elasticsearch#集群名稱spring.data.elasticsearch.cluster-name=prosayes#集群地址 9300埠是集群節點之間通信的埠號spring.data.elasticsearch.cluster-nodes=192.168.43.135
  • SpringBoot+Elasticsearch實戰
    >1.8</java.version>        <elasticsearch.version>6.4.1</elasticsearch.version>        <spring.data.elasticsearch.version>3.1.0.RELEASE</spring.data.elasticsearch.version
  • SpringBoot 集成 Elasticsearch 實戰
    >1.8</java.version>        <elasticsearch.version>6.4.1</elasticsearch.version>        <spring.data.elasticsearch.version>3.1.0.RELEASE</spring.data.elasticsearch.version
  • 芋道 Spring Boot Elasticsearch 入門
    Elasticsearch(ES)提供了兩種連接方式:transport :通過 TCP 方式訪問 ES 。對應的庫是 org.elasticsearch.client.transport 。rest :通過 HTTP API 方式訪問 ES 。
  • Spring Data ElasticSearch 使用
    操作,將原始操作elasticSearch的客戶端API 進行封裝 。-- 配置elasticSearch的連接 --> <elasticsearch:transport-client id="client" cluster-nodes="localhost:9300" cluster-name="my-elasticsearch"/> <!
  • SpringBoot+ ElasticSearch實現全文搜索功能
    ;@Configurationpublic class ElasticsearchConfig { @Value("${wangzz.elasticsearch.hostlist}") private String hostlist; @Bean public RestHighLevelClient restHighLevelClient(){
  • ES實戰系列01:基於SpringBoot和RestHighLevelClient 快速搭建博客搜索系統
    本文知識導航01 項目簡介本項目基於SpringBoot 2.3,ElasticSearch 7.7.1,同時使用es官網提供的 elasticsearch-rest-high-level-client
  • 走進大數據丨ElasticSearch6.X的JavaAPI使用一
    通過Java操作Elastic Search6,環境請看:走進大數據丨 ElasticSearch6.X的JavaAPI環境部署import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;import org.elasticsearch.action.get.GetResponse
  • Elasticsearch 的快照插件
    Elasticsearch 的快照倉庫分為本地倉庫(local repository)和遠程倉庫(remote repository)兩種。本地倉庫主要作為測試使用(單元測試或者試用 Elasticsearch 時使用),在生產線上使用意義不大。生產線上主要使用遠程倉庫,因為它可以將集群數據放在集群以外的地方,以作為數據備份。官方遠程倉庫插件主要有:AWS、GCS、Azure、HDFS 四個插件。
  • Elasticsearch如何優雅的激活X-Pack這個終極守護神
    PEMpem方式比較特殊,可以使用elasticsearch自帶工具生成的crt文件進行校驗,也可以使用openssl生成的pem文件進行校驗,前一種方式使用的較多,後一種使用的相對較少。筆者遇到的客戶現場就是後一種方式,網上資料很少,在填了無數坑之後才搞定的...
  • 實戰:Nodejs+Mongodb+Elasticsearch 實現簡單的搜索
    請求 elasticsearch使用 mongo-connector 同步 mongodb 的數據到 elasticsearch前端隨便請求一下elasticsearch本文使用的是 elasticsearch-rtf,這個庫使用的是
  • Spring Data Elasticsearch的使用
    一、項目準備 首先說一下本次使用的ES是7.6.0,Spring Boot則是2.4.0,因為不同的版本在使用的過程中還是會有一些差別,這點大家注意一下。文檔地址:https://docs.spring.io/spring-data/elasticsearch/docs/3.2.12.RELEASE/reference/html。
  • ElasticSearch2.4安裝配置SearchGuard權限驗證
    - CN=test,OU=client,O=client,L=Test, C=DE重啟所有節點將配置寫入ES   在其中一個節點執行即可cd /home/elasticsearch;import com.floragunn.searchguard.ssl.util.SSLConfigConstants;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings
  • 中間件:ES組件RestHighLevelClient用法詳解
    在使用RestHighLevelClient的語法時,通常涉及上面幾個方面,在掌握基礎用法之上可以根據業務特點進行一些自定義封裝,這樣可以更優雅的解決業務需求。2、核心依賴使用RestHighLevelClient需要依賴rest-high-level-client包,和ES相關基礎依賴。
  • springboot整合elasticsearch全文檢索入門
    //請與spring-boot-starter-data-elasticsearch的jar包版本一致compile('org.elasticsearch.client:transport:5.6.11') springBoot 2.0.5.RELEASE 起步依賴的elasticsearch的版本是 5.6.11 # 配置1.
  • Elasticsearch訪問日誌配置
    ,就裝一個簡單的,這個工具使用GET方式明文連接有身份驗證的ElasticSearch,不安全安裝docker pull mobz/elasticsearch-head:5docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5配置跨域