前言
本人目前用的elasticSearch是8.12.2的版本,springboot用的版本是2.6.2的版本,在集成的时候,出现
maven依赖
这个问题,解决办法升级springboot的版本到3.0,降低elasticSearch的版本,目前由于项目需要,暂时降低版本,但记录下本次尝试的过程
xml
<!-- <dependency>-->
<!-- <groupId>org.elasticsearch.client</groupId>-->
<!-- <artifactId>elasticsearch-rest-client</artifactId>-->
<!-- <version>8.12.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.12.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
配置
java
package org.example.es;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ElasticsearchConfig {
public static String url;
public static String apiKey;
@Value("${elasticsearch.url:localhost:9200}")
public void setUrl(String url) {
this.url = url;
}
@Value("${elasticsearch.apiKey:ZTNHZ1RwWUJtajlYVkszdmJ3YUo6ZXd4bUpGOHVUdnFvWmNEZ3JjWlgxdw==}")
public void setApiKey(String apiKey) {
ElasticsearchConfig.apiKey = apiKey;
}
}
java
package org.example.es;
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.RestClientOptions;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.*;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class EsClient {
private static ElasticsearchClient client;
public ElasticsearchClient getInstance() {
if(client == null) {
synchronized (this) {
RestClient restClient = RestClient
.builder(HttpHost.create(ElasticsearchConfig.url))
.setDefaultHeaders(new Header[]{
new BasicHeader("Authorization", "ApiKey " + ElasticsearchConfig.apiKey)
})
.build();
ElasticsearchTransport transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
client = new ElasticsearchClient(transport);
return client;
}
}
return client;
}
}
java
@Autowired
private EsClient esClient;
@PostMapping(value = "/esTest")
public void esTest() {
ElasticsearchClient instance = esClient.getInstance();
try {
CreateIndexResponse createIndexResponse = instance.indices().create(c ->
c.index("index_user_info")
.settings(s -> s.numberOfShards("1").numberOfReplicas("3"))
.mappings(m -> m.properties("id", p -> p.text(d -> d))
.properties("name", p -> p.text(t -> t.analyzer("ik_max_word")))
.properties("height", p -> p.double_(d -> d))
.properties("createTime", p -> p.date(d -> d.format("yyyy-MM-dd")))
)
);
boolean acknowledged = createIndexResponse.acknowledged();
log.info("创建index_user_info索引返回结果:{}",acknowledged);
} catch (IOException e) {
throw new RuntimeException(e);
}
}