話不多說直接上代碼,首先關注點Springboot相關ES相關的版本對應
找到對應的版本號,我這里對應7.17.1 對應的springboot版本 2.3.* 即可
上圖為Springboot相關依賴
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>7.17.1</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>7.17.1</version>
<exclusions>
<exclusion>
<artifactId>elasticsearch</artifactId>
<groupId>org.elasticsearch</groupId>
</exclusion>
<exclusion>
<artifactId>elasticsearch-core</artifactId>
<groupId>org.elasticsearch</groupId>
</exclusion>
</exclusions>
</dependency>
1.2創(chuàng)建連接
es6.0以后廢除 ElasticsearchTemplate
原來9300,連接方式 換成了9200,yml/properties 切記配置文件中端口號要改成9200,9300不支持
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 lombok.extern.slf4j.Slf4j;
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.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Value("${http.port}")
private String httpPort;
兩種連接方式,用那種都可以
## **第一種:**
@Bean
public ElasticsearchClient elasticsearchClient() {
HttpHost[] httpHosts = getHttpHosts();
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//賬號密碼
credentialsProvider.setCredentials(
AuthScope.ANY, new UsernamePasswordCredentials("name", "password"));
RestClientBuilder builder = RestClient.builder(httpHosts)
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
RestClient restClient = builder.build();
ElasticsearchTransport transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
return new ElasticsearchClient(transport);
}
**
## 第二種:
**
@Bean
public RestHighLevelClient RestHighLevelClient() {
HttpHost[] httpHosts = getHttpHosts();
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//賬號密碼
credentialsProvider.setCredentials(
AuthScope.ANY, new UsernamePasswordCredentials("name", "password"));
return new RestHighLevelClient(
RestClient.builder(httpHosts)
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
);
}
private HttpHost[] getHttpHosts() {
return Arrays.stream(httpPort.split(",")).map(x -> {
String[] hostInfo = x.split(":");
return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
}).toArray(HttpHost[]::new);
}
ES
創(chuàng)建索引以及映射相關(首先映射分詞要保持環(huán)境中Es下的分詞器安裝正確)
//創(chuàng)建索引
public Boolean createEsIndex(String indexName) {
try {
// 創(chuàng)建索引
ElasticsearchClient client = esClientConfig.elasticsearchClient();
CreateIndexResponse createIndexResponse = client.indices().create(c -> c.index(indexName));
// 響應狀態(tài)
log.debug("增加索引操作 ===={} " + createIndexResponse.acknowledged());
} catch (IOException e) {
log.error("es InsertError----{}", e);
}
return true;
}
//刪除索引
@Override
public Boolean delIndex(String indexName) {
try {
ElasticsearchClient client = esClientConfig.elasticsearchClient();
// 刪除索引
DeleteIndexResponse deleteIndexResponse = client.indices().delete(e -> e.index(indexName));
log.debug("刪除操作 ===={} " + deleteIndexResponse.toString());
} catch (IOException e) {
log.error("es delError----{}", e);
}
return true;
}
對應的增刪改查
//增加 文檔
@Override
public Boolean createDocument() {
String indexName = "test";
try {
RestHighLevelClient restHighLevelClient = esClientConfig.RestHighLevelClient();
CreateIndexRequest request = new CreateIndexRequest(indexName);
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("properties");
{
builder.startObject("id");
{
builder.field("type", "long");
}
builder.endObject();
builder.startObject("title");
{
builder.field("type", "text")
//插入時分詞
.field("analyzer", "ik_smart")
//搜索時分詞
.field("search_analyzer", "ik_max_word");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
request.mapping(builder);
org.elasticsearch.client.indices.CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
log.debug("insertArticleIndex{}", createIndexResponse.toString());
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
//刪除文檔文章來源:http://www.zghlxwxcb.cn/news/detail-514845.html
@Override
public Boolean delDocument(String id,String index) {
//兩種方式都可以
try {
ElasticsearchClient client = esClientConfig.elasticsearchClient();
// 構(gòu)建請求
DeleteResponse delete = client.delete(e -> e.index(index).id(id));
log.debug("deleteResponse.result() = " + delete.toString());
/* RestHighLevelClient restHighLevelClient = esClientConfig.RestHighLevelClient();
DeleteRequest deleteRequest=new DeleteRequest(index);
deleteRequest.id(id);
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
log.debug("deleteResponse.result() = " + delete.getResult());*/
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
//模糊查詢 增加高亮可以自行按照條件拼接文章來源地址http://www.zghlxwxcb.cn/news/detail-514845.html
@Override
public List<Long> testQuery(String str, int page, int size) {
try {
if (page < 1) {
page = 1;
}
if (size < 0) {
size = 5;
}
int start = (page - 1) * size;
int end = page * size - 1;
String index = "test";
ElasticsearchClient client = esClientConfig.elasticsearchClient();
// 模糊查詢,fuzziness表示差幾個可以查詢出來
SearchResponse<ArticleEsDO> searchResponse =
client.search(s -> s.index(index).query(q -> q.wildcard(f -> f.field("title").value("*" + str + "*"))).from(start).size(end)
, Test.class);
List<Test> collect = searchResponse.hits().hits().stream().map(Hit::source).collect(Collectors.toList());
return collect.stream().map(ArticleEsDO::getId).collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
到了這里,關于Java SpringBoot整合elasticsearch 7.17相關問題記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!