本章節介紹Elasticsearch的Java Client的原理、版本兼容性以及使用示例,幫助您快速地使用Java客戶端與Elasticsearch集群進行交互,完成檢索、分析等相關業務。
Transport Client遷移至REST Client
Transport Client隨著Elasticsearch的第一個版本誕生,是一個特別的客戶端。特別之處在于,它使用TCP協議與Elasticsearch通信,這也造成了當客戶端與不同版本的Elasticsearch通信時,會存在兼容性問題。詳情請參見Motivations around a new Java client。
Elasticsearch官網于2016年發布Low Level REST客戶端,該客戶端基于Apache HTTP客戶端,允許通過HTTP協議與任何版本的Elasticsearch集群通信。在Low Level REST客戶端的基礎上,Elasticsearch發布了High Level REST Client。
Elasticsearch 7.0中已經棄用Transport Client,在8.0中完全移除它。因此在實際開發中建議您使用Java REST Client。REST Client通過HTTP請求,幫助您處理請求和返回的序列化問題,為您的業務開發帶來便捷。
注意
- 如果您需要使用Transport Client通過9300端口訪問阿里云Elasticsearch實例,請購買5.5或5.6版本的實例(6.x及以上版本不支持)。
- 使用Transport Client 5.5或5.6版本與Elasticsearch建立連接時會提示NoNodeAvailableException的錯誤。推薦使用Transport
Client 5.3.3或Java Low Level REST Client來訪問Elasticsearch集群,以保障版本的兼容性。如果使用Transport Client,需要在代碼中將
client.transport.sniff
設置為false,詳情請參見Transport Client(5.x)。
Java REST客戶端
Java REST客戶端有兩種類型:
- Java Low Level REST Client:Elasticsearch Client低級別客戶端。它允許通過HTTP請求與Elasticsearch集群進行通信。API本身不負責數據的編碼解碼,由用戶去編碼解碼。它與所有的Elasticsearch版本兼容。
- Java High Level REST Client:Elasticsearch Client官方高級客戶端?;诘图壙蛻舳?,主要目標是為了暴露各API特定的方法。Java
High Level REST Client依賴于Elasticsearch核心項目,將Request對象作為參數,返回一個Response對象。所有API都可以同步或異步調用。
- 同步調用方法立即返回一個Response對象。
- 而異步調用方法(方法名以async結尾)依賴于監聽,當有請求返回或是錯誤返回時,該監聽會通知到對應的方法繼續執行。
本章節為您講解Java Client的用法(建議優先使用REST Client),包括: