添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
这里要注意版本,本地安装的es版本要和依赖的版本对应,查看springboot中依赖的版本
<properties>
<java.version>1.8</java.version>
<!--自定义es版本,和自己安装的版本一致-->
<elasticsearch.version>7.6.1</elasticsearch.version>
</properties>
es客户端配置
package es;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* es config
*
* @author emage-zhoufan
*/
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
// 如果是集群就配置多个
// new HttpHost("127.0.0.1", 9201, "http")));
return client;
}
}
写测试类
package com.example.elasticsearchapi;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import pojo.User;
import java.io.IOException;
import java.util.List;
@SpringBootTest
class ElasticsearchApiApplicationTests {
@Autowired
private RestHighLevelClient client;
@Test
void contextLoads() {
}
/**
* 创建索引
*/
@Test
void createIndexTest() throws IOException {
// 1.创建索引请求
CreateIndexRequest zhuandafa3 = new CreateIndexRequest("zhuandafa3");
// 2.客户端执行请求
CreateIndexResponse createIndexResponse =
client.indices().create(zhuandafa3, RequestOptions.DEFAULT);
System.out.println("===============>" + createIndexResponse);
}
/**
* 获取索引 判断是否存在
*/
@Test
void getIndexTest() throws IOException {
GetIndexRequest zhuandafa3 = new GetIndexRequest("zhuandafa3");
// 判断索引是否存在
boolean exists = client.indices().exists(zhuandafa3, RequestOptions.DEFAULT);
System.out.println("===============>" + exists);
GetIndexResponse getIndexResponse =
client.indices().get(zhuandafa3, RequestOptions.DEFAULT);
System.out.println("===============>" + getIndexResponse);
}
/**
* 删除索引
*/
@Test
void delIndexTest() throws IOException {
DeleteIndexRequest zhuandafa3 = new DeleteIndexRequest("zhuandafa3");
AcknowledgedResponse delete = client.indices().delete(zhuandafa3, RequestOptions.DEFAULT);
System.out.println("===============>" + delete.isAcknowledged());
}
/**
* 添加文档
*/
@Test
void addDocumentTest() throws IOException {
User user = User.builder().name("御坂美琴10").age("18").birthday("1949-10-01").desc("国庆").build();
// User user1 = new User("赚小花", "20", "2000-01-01", "啥也不知道");
IndexRequest request = new IndexRequest("zhuandafa4");
// request.id("1");
// 默认不用写也行
// request.timeout(TimeValue.timeValueSeconds(1));
request.source(JSON.toJSONString(user), XContentType.JSON);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.status());
System.out.println(indexResponse);
}
/**
* 批量添加文档
*/
@Test
void bulkDocumentTest() throws IOException {
BulkRequest bulkRequest = new BulkRequest("zhuandafa3");
List<User> userList = Lists.newArrayList();
userList.add(new User("御坂美琴1", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴2", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴3", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴4", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴5", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴6", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴7", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴8", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴9", "16", "2000-01-01", "啥也不知道"));
userList.add(new User("御坂美琴10", "16", "2000-01-01", "啥也不知道"));
// 批处理请求
for (int i = 0; i < userList.size(); i++) {
bulkRequest.add(new IndexRequest().id(String.valueOf(i + 1))
.source(JSON.toJSONString(userList.get(i)), XContentType.JSON));
}
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures()); // 返回false代表成功
}
/**
* 更新文档
*/
@Test
void updateDocumentTest() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("zhuandafa3", "1");
updateRequest.timeout(TimeValue.timeValueSeconds(1));
User user = User.builder().age("28").build();
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.status());
}
/**
* 删除文档
*/
@Test
void delDocumentTest() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("zhuandafa3", "EDnC2IIBwEZxft8byGgM");
deleteRequest.timeout(TimeValue.timeValueSeconds(1));
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
/**
* 查询
*/
@Test
void searchDocumentTest() throws IOException {
// "zhuandafa3", "zhuandafa4" 不传index表示查全部索引
SearchRequest searchRequest = new SearchRequest("zhuandafa3");
// SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 如果是中文 不用中文分词器可能会有问题 .keywor表示不使用分词器
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword", "御坂美琴10");
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "御坂美琴");
// MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
searchSourceBuilder.query(termQueryBuilder);
searchSourceBuilder.query(matchQueryBuilder);
// searchSourceBuilder.fetchSource(false);
// searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));
searchRequest.source(searchSourceBuilder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(search.getHits().getTotalHits().value));
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
}