1. 程式人生 > 其它 >n. Elasticsearch JAVA API操作

n. Elasticsearch JAVA API操作

引言

Elasticsearch所支援的客戶端連線方式有兩種

  1. Transport 連線
    底層使用socket連線,用官方提供的TransPort客戶端,網路IO框架使用的是netty
  2. Http連線(Rest Client)
    採用Http請求的方式,訪問Elasticsearch.
    注意:ES的發展規劃中在7.0版本開始將廢棄 TransportClient,8.0版本中將完全移除 TransportClient,取而代之的是High Level REST Client。

Rest Client

在Elasticsearch官方提供了兩種基於Http連線的Rest Client

  1. Java Low Level REST Client
    Elasticsearch 的官方低階客戶端。它允許通過 http 與 Elasticsearch 叢集通訊。將請求編組和響應取消編組給使用者。它與所有 Elasticsearch 版本相容。
  2. 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基礎操作。