1.引入maven依賴
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.4.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>8.4.1</version>
</dependency>
2.application.yml添加配置
spring:
elasticsearch:
rest:
uris: 127.0.0.1:9200 #es
username: elastic
password: ******
3.編寫config文件
package com.example.demo.config;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
@Configuration
public class ElasticSearchConfig {
@Value("${spring.elasticsearch.rest.uris}")
private String hosts;
@Value("${spring.elasticsearch.rest.username}")
private String userName;
@Value("${spring.elasticsearch.rest.password}")
private String passWord;
@Bean
public ElasticsearchClient elasticsearchClient(){
HttpHost[] httpHosts = toHttpHost();
// 無驗證信息
//RestClient restClient = RestClient.builder(httpHosts).build();
// 有驗證信息
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
AuthScope.ANY, new UsernamePasswordCredentials(userName, passWord));
RestClientBuilder builder = RestClient.builder(httpHosts);
builder.setRequestConfigCallback(
new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(
RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setSocketTimeout(60000).setConnectTimeout(5000);
}
});
builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
RestClient restClient = builder.build();
// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(restClient,new JacksonJsonpMapper());
// And create the API client
return new ElasticsearchClient(transport);
}
private HttpHost[] toHttpHost() {
if (!StringUtils.hasLength(hosts)) {
throw new RuntimeException("invalid elasticsearch configuration. elasticsearch.hosts不能為空!");
}
// 多個IP逗號隔開
String[] hostArray = hosts.split(",");
HttpHost[] httpHosts = new HttpHost[hostArray.length];
HttpHost httpHost;
for (int i = 0; i < hostArray.length; i++) {
String[] strings = hostArray[i].split(":");
httpHost = new HttpHost(strings[0], Integer.parseInt(strings[1]), "http");
httpHosts[i] = httpHost;
}
return httpHosts;
}
}
啟動demo項目,通過控制臺日志查看是否能夠正常連接es。文章來源地址http://www.zghlxwxcb.cn/news/detail-521509.html
4.在DemoApplicationTests編寫簡單測試操作es。
@SpringBootTest
@Slf4j
class DemoApplicationTests {
@Autowired
private ElasticsearchClient client;
@Test
public void createTest() throws IOException {
log.info("創(chuàng)建索引");
//寫法比RestHighLevelClient更加簡潔
CreateIndexResponse indexResponse = client.indices().create(c -> c.index("user"));
log.info(String.valueOf(indexResponse));
}
@Test
public void getCompanyList() throws IOException {
log.info("查詢索引");
GetIndexResponse getIndexResponse = client.indices().get(i -> i.index("user"));
log.info(String.valueOf(getIndexResponse));
}
@Test
public void existsTest() throws IOException {
log.info("測試index是否存在");
BooleanResponse booleanResponse = client.indices().exists(e -> e.index("user"));
log.info(String.valueOf(booleanResponse.value()));
}
@Test
public void userInsert() throws IOException {
log.info("user信息插入");
//創(chuàng)建user列表
List<User> users = new ArrayList<>();
User user = new User();
user.setId("18");
user.setName("李三");
user.setAge(13);
user.setSex("男");
users.add(user);
List<BulkOperation> bulkOperations = new ArrayList<>();
//將user中id作為es id,也可不指定id es會自動生成id
users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-521509.html
到了這里,關(guān)于springboot整合elasticsearch8的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!