### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本篇是《java與es8實戰》系列的第二 ...
歡迎訪問我的GitHub
這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
本篇概覽
- 本篇是《java與es8實戰》系列的第二篇,主要任務是為動手實戰做好準備工作,包括這些內容
- 藉助docker,快速部署es服務
- 藉助docker-compose,以更簡單的方式部署es集群和kibana服務
- 介紹實戰中涉及的環境信息,例如JDK、軟體、庫的版本
- 聊聊java操作es的基本套路
- 為整個《java與es8實戰》系列創建父工程,後面的實戰有關的代碼,全部寫在這個父工程下麵
- OK,開始
藉助docker,快速部署es服務
- 《java與es8實戰》系列的重點是開發,因此不會花太多時間去講解如何部署和配置es,基本上就是有個能用的es8環境即可
- 推薦您參考《Docker下elasticsearch8部署、擴容、基本操作實戰(含kibana)》,這裡面詳細說明的如何在docker下快速部署es服務,以及一些常見的操作
藉助docker-compose,以更簡單的方式部署es集群和kibana服務
- 如果您覺得《Docker下elasticsearch8部署、擴容、基本操作實戰(含kibana)》的操作過於複雜,想更簡單的部署一個es集群,外加kibana開箱即用,可以參考《docker-compose快速部署elasticsearch-8.x集群+kibana》,另外此文還會告訴您如何部署一個無需安全檢查(證書、賬號密碼)的es集群
介紹實戰中的環境信息,給您作為參考
- 操作系統:macOS Monterey(M1 Pro晶元的MacBook Pro,16G記憶體)
- Docker:Docker Desktop 4.7.1 (77678)
- ElasticSearch:8.2.2
- Kibana:8.2.2
- JDK:openjdk 11.0.14.1
- Maven:3.8.5
- IDEA: 2022.1.2 (Ultimate Edition)
- SpringBoot:2.7.0
聊聊java操作es的基本套路
- 從es官方的視角來看,提供了三種操作es的方式
- Java Transport Client :提供非同步操作es的客戶端API,自7.0.0版本開始被廢棄,所以本系列是用不上了
- Java REST Client:這個算是大名鼎鼎了,平常用的也很多,它由Low Level和Hight Level兩部分組成,Low Level負責負載均衡、容錯、持續連接、底層日誌跟蹤等基本能力,Hight Level是基於Low Level實現的,提供了原有的Transport Client的客戶端能力,提供同步和非同步兩種操作模式,從7.X版本開始,es官方就給出了遷移指導:推薦用戶從Java REST Client遷移到Java API Client
- Java API Client:官方主推方案,依賴Elasticsearch core,對請求和響應都有強類型約束,支持jackson和JSON-b等兩種序列化&反序列化方案,所有API都提供了同步和非同步兩種方式,推薦使用fluent style+lambda模式編碼
-
從以上小結可以看出,在es8.x的環境下,使用Java API Client是首選,不過舊代碼以Java REST Client居多,拿來也能在es8環境使用(通過一個api設置,讓請求的header中帶有相容信息,es伺服器收到此信息會以7.x模式處理請求)
-
再從spring視角來看如何操作es
- Spring Data模塊下屬的Spring Data Elasticsearch是推薦的es操作方案
- High Level REST Client是Spring Data中預設的底層實現
- 儘管Spring Data依然支持Java Transport Client,但推薦使用的是High Level REST Client
- 遺憾的是,Spring Data目前還不支持Java API Client,也不支持es的8.x版本,詳情如下表,來自官方
- 由於《java與es8實戰》系列已將es版本固定為8.2,因此,編碼過程中,es操作方案選擇es官方的Java API Client,和Spring Data不會有關係了
為整個《java與es8實戰》系列創建父工程
-
整個系列後面的文章,少不了寫代碼,還是提前建好工程吧,用maven建立一個父工程,後面的代碼都放在這個父工程下麵,方便jar包版本和代碼資源的統一管理
-
新建名為elasticsearch-tutorials的maven工程,其pom.xml內容如下,可見非常簡單,僅僅是對jar做了些管理,再定義了一些常量,今後新增的子工程可以用到,例如SpringBoot版本為2.7.0
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bolingcavalry</groupId>
<artifactId>elasticsearch-tutorials</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>elasticsearch-tutorials</name>
<properties>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<!-- <maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>-->
<springboot.version>2.7.0</springboot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<elastic.version>8.2.2</elastic.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>${elastic.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- Needed only if you use the spring-boot Maven plugin -->
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 至此,準備工作算是完成了,接下來文章會很輕鬆,和大家聊聊關於Java API Client的一些重要知識點,畢竟後面寫代碼全指望它了