一、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-tw/n/188666.html