Java连接Elasticsearch(ES)集群通常涉及到以下几个步骤:

- 添加依赖:首先需要在Java项目中添加Elasticsearch客户端的依赖。
- 配置连接:配置连接ES集群的参数。
- 建立连接:使用配置信息建立连接。
- 操作ES:通过连接执行索引、搜索等操作。
以下是详细的步骤和示例代码:
添加依赖
需要在项目的pom.xml文件中添加Elasticsearch客户端的依赖,以下是一个Maven项目的示例:
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearchresthighlevelclient</artifactId>
<version>7.10.1</version>
</dependency>
</dependencies>
配置连接
配置连接ES集群的参数,以下是一个简单的配置示例:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")
)
);
这里假设ES集群运行在本地主机的9200端口,使用HTTP协议。
建立连接
上面的代码已经完成了连接的建立。RestHighLevelClient是一个高级客户端,可以用来执行各种Elasticsearch操作。

操作ES
下面是一些基本的操作示例:
索引文档
IndexRequest indexRequest = new IndexRequest("users");
indexRequest.id("1");
indexRequest.source("name", "John Doe", "age", 30);
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
搜索文档
SearchRequest searchRequest = new SearchRequest("users");
searchRequest.source(new SearchSourceBuilder().query(new MatchAllQuery()));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(searchResponse.toString());
示例代码
以下是一个完整的示例,展示了如何连接到ES集群并执行索引和搜索操作:
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
public class ElasticsearchExample {
public static void main(String[] args) {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")
)
);
try {
// 索引文档
IndexRequest indexRequest = new IndexRequest("users");
indexRequest.id("1");
indexRequest.source("name", "John Doe", "age", 30);
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
// 搜索文档
SearchRequest searchRequest = new SearchRequest("users");
searchRequest.source(new SearchSourceBuilder().query(new MatchAllQuery()));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(searchResponse.toString());
// 检查索引是否存在
GetIndexRequest getIndexRequest = new GetIndexRequest("users");
GetIndexResponse getIndexResponse = client.indices().get(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(getIndexResponse.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FAQs
Q1:如何处理连接异常?
A1: 在连接Elasticsearch集群时,可能会遇到各种异常,如IOException,可以通过捕获这些异常并适当处理来避免程序崩溃。
try {
// 尝试连接和操作ES
} catch (IOException e) {
// 处理异常,例如打印日志或重试连接
e.printStackTrace();
}
Q2:如何配置多个ES节点?

A2: 如果ES集群由多个节点组成,可以在RestHighLevelClient的构建器中添加多个HttpHost对象:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http"),
new HttpHost("localhost", 9202, "http")
)
);
这样,客户端会尝试连接所有指定的节点。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/190879.html