ElasticSearch,枯燥的基礎知識講完啦!該上 Java 客戶端了!

松哥原創的 Spring Boot 視頻教程已經殺青,感興趣的小夥伴戳這裏-->Spring Boot+Vue+微人事視頻教程


ElasticSearch 連着搞了 28 篇,總算把基本操作和大家分享完了!

爲什麼我這麼重視 Es 基本操作呢?很多小夥伴都在期待趕緊上 Java 客戶端操作,但我還是頂着閱讀崩盤的壓力把基礎知識更完了。原因很簡單,這些基礎知識太重要了。

舉一個極端的例子,我們前面分享的 Es 基本操作都是 RESTful 風格的,也就是說,如果你掌握了 Es 基本操作,即使不學習 Es 的 Java 客戶端,利用一些常見的 Java 網絡請求工具都可以去操作 Es 了,例如 JDK 裏邊的 HttpUrlConnection,或者一些外部工具如 HttpClient、RestTemplate、OkHttp 等。

以 HttpUrlConnection 爲例,請求方式如下:

public class HttpRequestTest {
    public static void main(String[] args) throws IOException {
        URL url = new URL("http://localhost:9200/books/_search?pretty=true");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        if (con.getResponseCode() == 200) {
            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String str = null;
            while ((str = br.readLine()) != null) {
                System.out.println(str);
            }
        }
    }
}

前面視頻跟大家分享的 Es 所有操作,都可以套用上面這段代碼。自己構造 Http 請求、構造請求參數、構造請求體等,然後手動發送請求,再去手動解析請求結果(JSON 字符串解析而已)。只要掌握了基本操作,再去用 Java 操作 Es 就是 So Easy 了!

那麼我們爲什麼還要去學習 Java API 呢?

學習 Java API 的意義在於,它幫我們將很多操作封裝成了 API,不用自己再去手動拼 JSON 字符串了,也不用手動解析字符串了,這是它的方便之處。如果不用 Java API 的話,請求參數 JSON、響應 JSON 都需要我們手動去拼接並解析,簡單的 JSON 字符串還好,複雜的 JSON 字符串就很頭大了。

所以,我們還是很有必要專門來學習一下 Java API 的。

在正式開始介紹 Java 客戶端之前,我先和大家稍微捋一捋目前常見的 Java 客戶端都有哪些,以及各自的特點,作爲一個簡單的開篇。

目前 ElasticSearch 的 Java 客戶端還是蠻多選擇的,松哥大致上整理了一下有如下幾種:

  • TransportClient
  • Jest
  • Spring Data Elasticsearch
  • Java Low Level REST Client
  • Java High Level REST Client

TransportClient

大家在網上搜索 ElasticSearch 資料時,如果找到的是兩年前的資料,應該會很容易看到 TransportClient。不過從 ElasticSearch7.0 開始,官方已經不再推薦使用 TransportClient,並且表示會在 ElasticSearch8.0 中完全移除相關支持。所以如果你是剛剛開始接觸 ElasticSearch,那麼我覺得 TransportClient 目前可以放棄了。

Jest

Jest 提供了更流暢的 API 和更容易使用的接口,並且它的版本是遵循 ElasticSearch 的主版本號的,這樣可以確保客戶端和服務端之間的兼容性。

早期的 ElasticSearch 官方客戶端對 RESTful 支持不夠完美, Jest 在一定程度上彌補了官方客戶端的不足,但是隨着近兩年官方客戶端對 RESTful 功能的增強,Jest 早已成了明日黃花,最近的一次更新也停留在 2018 年 4 月,所以 Jest 小夥伴們也不必花時間去學了,知道曾經有過這麼一個東西就行了。

Spring Data Elasticsearch

Spring Data 是 Spring 的一個子項目。用於簡化數據庫訪問,支持NoSQL 和關係數據存儲。其主要目標是使數據庫的訪問變得方便快捷。Spring Data 具有如下特點:

Spring Data 項目支持 NoSQL 存儲:

  • MongoDB (文檔數據庫)
  • Neo4j(圖形數據庫)
  • Redis(鍵/值存儲)
  • Hbase(列族數據庫)
  • ElasticSearch

Spring Data 項目所支持的關係數據存儲技術:

  • JDBC
  • JPA

從前面這段介紹中小夥伴們可以發現,Spring Data 其實是對一些既有的框架進行封裝,從而使對數據的操作變得更加容易。Spring Data Elasticsearch 其實也是如此,它底層封裝的就是官方的客戶端 Java High Level REST Client,這個我們從它的依賴關係中就可以看出來:

老實說,Spring Data Elasticsearch 用起來還是蠻方便的,這個松哥後面會和大家分析。

Java Low Level REST Client

從字面上來理解,這個叫做低級客戶端。

它允許通過 Http 與一個 Elasticsearch 集羣通信。將請求的 JSON 參數拼接和響應的 JSON 字符串解析留給用戶自己處理。低級客戶端最大的優勢在於兼容所有的 ElasticSearch 的版本(因爲它的 API 並沒有封裝 JSON 操作,所有的 JSON 操作還是由開發者自己完成),同時低級客戶端要求 JDK 爲 1.7 及以上。

低級客戶端主要包括如下一些功能:

  • 最小的依賴
  • 跨所有可用節點的負載均衡
  • 節點故障和特定響應代碼時的故障轉移
  • 連接失敗重試(是否重試失敗的節點取決於它失敗的連續次數;失敗次數越多,客戶端在再次嘗試同一節點之前等待的時間越長)
  • 持久連接
  • 跟蹤請求和響應的日誌記錄
  • 可選自動發現集羣節點

Java Low Level REST Client 的操作其實比較簡單,松哥後面會錄製一個視頻和大家分享相關操作。

Java High Level REST Client

從字面上來理解,這個叫做高級客戶端,也是目前使用最多的一種客戶端。它其實有點像之前的 TransportClient。

這個所謂的高級客戶端它的內部其實還是基於低級客戶端,只不過針對 ElasticSearch 它提供了更多的 API,將請求參數和響應參數都封裝成了相應的 API,開發者只需要調用相關的方法就可以拼接參數或者解析響應結果。

Java High Level REST Client 中的每個 API 都可以同步或異步調用,同步方法返回一個響應對象,而異步方法的名稱則以 Async 爲後綴結尾,異步請求一般需要一個監聽器參數,用來處理響應結果。

相對於低級客戶端,高級客戶端的兼容性就要差很多(因爲 JSON 的拼接和解析它已經幫我們做好了)。高級客戶端需要 JDK1.8 及以上版本並且依賴版本需要與 ElasticSearch 版本相同(主版本號需要一致,次版本號不必相同)。

舉個簡單例子:

7.0 客戶端能夠與任何 7.x ElasticSearch 節點進行通信,而 7.1 客戶端肯定能夠與 7.1,7.2 和任何後來的 7.x 版本進行通信,但與舊版本的 ElasticSearch 節點通信時可能會存在不兼容的問題。

好啦,今天的分享就先到這裏~下篇文章我們一起來學習 ElasticSearch Java 客戶端的使用~

當然如果你對 ElasticSearch 基礎知識還比較陌生,可以看看下面的鏈接~也可以去 B 站學習松哥錄製的 Es 教程:https://www.bilibili.com/video/BV1ft4y1e7tq。

ElasticSearch 基礎知識:

  1. 打算出一個 ElasticSearch 教程,誰贊成,誰反對?
  2. ElasticSearch 從安裝開始
  3. ElasticSearch 第三彈,核心概念介紹
  4. ElasticSearch 中的中文分詞器該怎麼玩?
  5. ElasticSearch 索引基本操作
  6. ElasticSearch 文檔的添加、獲取以及更新
  7. ElasticSearch 文檔的刪除和批量操作
  8. ElasticSearch 文檔路由,你的數據到底存在哪一個分片上?
  9. ElasticSearch 併發的處理方式:鎖和版本控制
  10. ElasticSearch 中的倒排索引到底是什麼?
  11. ElasticSearch 動態映射與靜態映射
  12. ElasticSearch 四種字段類型詳解
  13. ElasticSearch 中的地理類型和特殊類型
  14. ElasticSearch 23 種映射參數詳解
  15. ElasticSearch 如何配置某個字段的權重?
  16. ElasticSearch 23 種映射參數詳解【3】
  17. ElasticSearch 映射模版
  18. ElasticSearch 搜索入門
  19. ElasticSearch 全文搜索怎麼玩?
  20. ElasticSearch 打錯字還能搜索到?試試 fuzzy query!
  21. ElasticSearch 複合查詢,理解 Es 中的文檔評分策略!
  22. 想搜索附近評分較高的餐廳,ElasticSearch 大顯身手!
  23. ElasticSearch 如何像 MySQL 一樣做多表聯合查詢?
  24. ElasticSearch 地理位置查詢與特殊查詢
  25. ElasticSearch 搜索高亮與排序
  26. ElasticSearch 指標聚合
  27. ElasticSearch 桶聚合
  28. ElasticSearch 管道聚合

本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章