n. Elasticsearch JAVA API操作
引言
Elasticsearch所支援的客戶端連線方式有兩種
- Transport 連線
底層使用socket連線,用官方提供的TransPort客戶端,網路IO框架使用的是netty - Http連線(Rest Client)
採用Http請求的方式,訪問Elasticsearch.
注意:ES的發展規劃中在7.0版本開始將廢棄 TransportClient,8.0版本中將完全移除 TransportClient,取而代之的是High Level REST Client。
Rest Client
在Elasticsearch官方提供了兩種基於Http連線的Rest Client
- Java Low Level REST Client
Elasticsearch 的官方低階客戶端。它允許通過 http 與 Elasticsearch 叢集通訊。將請求編組和響應取消編組給使用者。它與所有 Elasticsearch 版本相容。 - Java High Level REST Client
Elasticsearch 的官方高階客戶端。基於低階客戶端,它公開 API 特定方法並處理請求編組和響應解組。
spring-data-elasticsearch
本文教程在Spring Boot框架中使用Rest Client,而Spring Boot已經幫我們整合好了用於ES操作的spring-data-elasticsearch
在spring-data-elasticsearch中我們可以發現一個核心的操作類ElasticsearchRestTemplate,而它是基於Java High Level REST Client的二次封裝
Spring Boot中配置
在Spring Boot中用於操作ES的Start的Maven pom配置如下,它的version版本受Spring Boot版本控制,所以我們一般不需要指定其版本
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
application.yml配置檔案
##如果為elasticsearch配置了安全賬號和密碼,需要指定其username和password,urls是配置叢集內部的主機地址
spring:
elasticsearch:
rest:
uris: http://192.168.31.100:9200
connection-timeout: 10000
到此為止,Spring Boot整合elasticsearch操作,就已經完成了,是不是有點So easy的感覺啦?
編寫實體對映
這一點操作跟JPA是一模一樣的方式,通過在實體類上的註解,而自動建立其mapping
對於實體類裡的每一個欄位,我們可以為其指定@Field註解,並設定其相關值,而建立對應的mapping對映關,如果沒有指定它在ES中對映型別,則會自動為其生成型別。
對映(map)關係也建立好了,現在還需要為每個實體建立一個Repository,而這些操作都是spring為我們提供的,為我們生成最基礎的CRUD操作,跟Mybatis-plus的操作是一模一樣
我們只需要建立一個介面,通過該介面繼承ElasticsearchRepository這個泛型介面,在泛型中指定對應的實體類,是不是有點像是Mybatis-plus中的BaseMapper?
至此,實際上我們一行操作ES的程式碼都沒有編寫,就已經建立好了實體與ES中資料的對映關係和在ES中操作實體的CRUD基礎操作。