ES客戶端詳解

一、ES客戶端介紹

ES(Elasticsearch)是一種開源的分佈式搜索引擎,通過RESTful web接口來進行通信。為了更加方便地使用ES,官方提供了各種語言的客戶端,例如Java、Python、PHP和.NET等,同時也有非官方客戶端。本文將重點介紹ES官方Java客戶端。

二、ES Java客戶端基本用法

ES Java客戶端通過maven依賴引入,具體依賴如下:


<dependency>  
    <groupId>org.elasticsearch</groupId>  
    <artifactId>elasticsearch</artifactId>  
    <version>7.9.3</version>  
</dependency>  

接着創建一個TransportClient對象,連接到ES服務器:


TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

連接成功後,就可以進行各種操作,例如創建、更新、刪除索引等等。這些操作可以使用IndexRequest、UpdateRequest和DeleteRequest對象完成。例如:


IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, TYPE_NAME, id).doc(source).upsert(indexRequest);
DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, TYPE_NAME, id);    

以上為ES Java客戶端基本用法,除此之外還有一些高級用法,例如Bulk API批量操作、Scroll API滾動搜索等等,可以根據具體需求進行使用。

三、ES Java客戶端配置

ES Java客戶端也可以進行配置,常用的配置包括:

1. 連接池配置

連接池用於維護多個與ES服務器連接的TransportClient對象,以減少創建連接的開銷,提高效率。連接池的配置可以使用Settings對象進行設置,例如:


Settings settings = Settings.builder().put("client.transport.sniff", true).put("cluster.name", "docker-cluster").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

2. Retry配置

ES Java客戶端默認會對失敗的操作進行3次重試,重試間隔為500ms,可以使用以下代碼修改配置:


Settings settings = Settings.builder().put("client.transport.retry_on_failure", true).put("client.transport.max_attempts", 5).put("client.transport.interval", "2s").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

3. SSL配置

ES Java客戶端支持SSL加密通信,可以使用以下代碼進行配置:


Settings settings = Settings.builder().put("client.transport.nodes_sampler_interval", "5s").put("xpack.security.transport.ssl.enabled", true).put("xpack.security.transport.ssl.verification_mode", "none").put("cluster.name", "docker-cluster").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

四、ES Java客戶端異常處理

在使用ES Java客戶端時,可能會遇到各種異常情況,例如網絡異常、索引不存在等等。要正確處理這些異常,可以使用try-catch語句,例如:


try {
    IndexResponse response = client.index(indexRequest).get();
} catch (ElasticsearchException e) {
    if (e.status() == RestStatus.CONFLICT) {
        // 數據衝突處理
    } else if (e.status() == RestStatus.NOT_FOUND) {
        // 數據不存在處理
    }
} catch (Exception e) {
    // 其他異常處理
}

上述代碼中,ElasticsearchException是ES Java客戶端自定義的異常,可以用於捕獲ES服務器返回的錯誤信息。

五、ES Java客戶端示例代碼

以下是一個基於ES Java客戶端的簡單示例代碼:


public class ElasticsearchClient {

    private static final String INDEX_NAME = "index_name";
    private static final String TYPE_NAME = "type_name";

    private TransportClient client;

    public ElasticsearchClient() throws UnknownHostException {
        Settings settings = Settings.builder().put("client.transport.sniff", true).put("cluster.name", "docker-cluster").build();
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
    }

    public void close() {
        client.close();
    }

    public void insert(String id, String source) {
        try {
            IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
            IndexResponse response = client.index(indexRequest).get();
        } catch (Exception e) {
            // 異常處理
        }
    }

    public void update(String id, String source) {
        try {
            IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
            UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, TYPE_NAME, id).doc(source).upsert(indexRequest);
            UpdateResponse response = client.update(updateRequest).get();
        } catch (Exception e) {
            // 異常處理
        }
    }

    public void delete(String id) {
        try {
            DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, TYPE_NAME, id);
            DeleteResponse response = client.delete(deleteRequest).get();
        } catch (Exception e) {
            // 異常處理
        }
    }

}

總結

到此為止,我們已經學習了ES Java客戶端的基本用法、配置、異常處理和示例代碼。ES Java客戶端是ES的重要組成部分,在實際應用中具有廣泛的應用價值。希望本文對大家有所幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/188666.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-28 13:32
下一篇 2024-11-28 13:32

相關推薦

  • Spark集成ES開發

    本文將介紹如何使用Spark集成ES進行數據開發和分析。 一、系統概述 Spark是一個基於內存的分佈式計算系統,可以快速地處理大量數據。而ES(ElasticSearch)則是一…

    編程 2025-04-28
  • Python調用crt telnet客戶端的實現

    本篇文章將詳細介紹如何使用Python調用crt telnet客戶端。我們將從以下幾個方面進行闡述: 一、安裝crt telnet客戶端 首先,我們需要下載並安裝crt telne…

    編程 2025-04-28
  • 跨域通信浮標——實現客戶端之間的跨域通信

    本文將介紹跨域通信浮標的使用方法,該浮標可以實現客戶端之間的跨域通信,解決了瀏覽器同源策略的限制,讓開發者能夠更加方便地進行跨域通信。 一、浮標的原理 跨域通信浮標的原理是基於浮動…

    編程 2025-04-27
  • Python服務器客戶端

    本文將從以下幾個方面對Python服務器客戶端進行詳細闡述:socket編程、HTTP協議、Web框架、異步IO。 一、socket編程 Python的socket模塊是為網絡編程…

    編程 2025-04-27
  • C# Socket關閉後客戶端仍可連接的解決方法

    對於C# Socket通信中的一些問題,多數人可能已經熟知,但是有些問題仍然困擾着一部分人,例如Socket關閉後,客戶端仍然可以連接。本篇文章將在此問題為中心,圍繞該問題的原因和…

    編程 2025-04-27
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES時遇到CrashLoopBackOff問題,那麼本文將對這一問題進行詳細解答。我們將從以下方面進行闡述: 一、問題分析與定位 在使用Helm部署ES時,…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25

發表回復

登錄後才能評論