一、基础信息
1、pom.xml(根据业务选择适合版本)
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
2、nacos配置(根据业务选择适合模式)
elasticsearch:
prefix: http
uris: es-cn-**********************.aliyun.com:9200
username: esadmin
password: 123456
3、创建ElasticSearchConfig(项目启动自动注入)
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ElasticSearchConfig {
@Value("${elasticsearch.prefix}")
private String prefix;
@Value("${elasticsearch.uris}")
private String esUrl;
@Value("${elasticsearch.username}")
private String username;
@Value("${elasticsearch.password}")
private String password;
}
二、低级客户端创建
@Bean
public RestClient restClient() {
String[] split = esUrl.split(",");
HttpHost[] httpHost = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String[] item = split[i].split(":");
httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
}
return RestClient.builder(httpHost).build();
}
三、高级客户端创建
@Bean
public RestHighLevelClient restHighLevelClient() {
String[] split = esUrl.split(",");
HttpHost[] httpHost = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String[] item = split[i].split(":");
httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
}
return new RestHighLevelClient(RestClient.builder(httpHost));
}
四、高级客户端创建(带用户名和密码)
@Bean
public RestHighLevelClient restHighLevelClient() {
String[] split = esUrl.split(",");
HttpHost[] httpHost = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String[] item = split[i].split(":");
httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
}
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
RestClientBuilder restClientBuilder = RestClient.builder(httpHost)
.setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
return new RestHighLevelClient(restClientBuilder);
}
五、最新客户端创建
@Bean
public ElasticsearchClient elasticsearchClient() {
String[] split = esUrl.split(",");
HttpHost[] httpHost = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String[] item = split[i].split(":");
httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
}
RestClient restClient = RestClient.builder(httpHost).build();
return new ElasticsearchClient(new RestClientTransport(restClient, new JacksonJsonpMapper()));
}
六、最新客户端创建(带用户名和密码)
@Bean
public ElasticsearchClient elasticsearchClient() {
String[] split = esUrl.split(StrPool.COMMA);
HttpHost[] httpHost = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String[] item = split[i].split(StrPool.COLON);
httpHost[i] = new HttpHost(item[0], Integer.parseInt(item[1]), prefix);
}
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
RestClient restClient = RestClient.builder(httpHost)
.setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider)).build();
return new ElasticsearchClient(new RestClientTransport(restClient, new JacksonJsonpMapper()));
}
附一:增加部分参数
RestClientBuilder restClientBuilder = RestClient.builder(httpHost)
.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
int threadCount = 10;
httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(threadCount).build());
return httpClientBuilder;
})
.setRequestConfigCallback(requestConfigCallback -> {
requestConfigCallback.setConnectTimeout(10);
requestConfigCallback.setSocketTimeout(10);
return requestConfigCallback;
});
附二:最新客户端注入时抛出异常:jakarta/json/spi/JsonProvider
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>7.17.9</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>