* [第一步Spring boot集成ELasticSearch][2] * [第二步Spring boot中配置ElasticSearch][3] * [第三步 创建操作的实体Bean(我创建的是UserItemBean)][4] * [第四步 使用ElasticSearch的API进行测试][5]
Spring boot 集成ElasticSearch
第一步Spring boot集成ELasticSearch
`<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
</dependencies> `
>
> Spring boot集成ElasticSearch主要依赖
>
> ```
`spring-boot-starter-data-elasticsearch
`
这里需要大家特别注意自己使用的ElasticSearch的版本 是否和自己的版本一致
我这里是使用的最新的ElasticSearch 7.8.0
需要配置版本
<properties> <java.version>1.8</java.version> <elasticsearch.version>7.8.0</elasticsearch.version> </properties>
### 第二步Spring boot中配置ElasticSearch {#toc_2}
> 创建一个<mark>ElasticSearchConfig</mark>的类,配置在下ElasticSearch的高级客户端api
>
> ```
`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;
/**
* Elasticsearch 配置
*/
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){//配置rest客户端
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("192.168.1.187", 9200, "http")));
return client;
}
}
`
注意:这里可以配置多个ElasticSearch 只需要创建多个HttpPost即可
第三步 创建操作的实体Bean(我创建的是UserItemBean)
这个实体主要是使用ElasticSearch进行接口操作的实体
`import org.springframework.stereotype.Component;
@Component public class UserItemBean { //用户名 private String userName; //age private int age;
public UserItemBean() {
}
public UserItemBean(String name, int age) {
this.userName = name;
this.age = age;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserItemBean{" +
"userName='" + userName + '\'' +
", age='" + age + '\'' +
'}';
}
} `
### 第四步 使用ElasticSearch的API进行测试 {#toc_4}
> 我这里为了方便简单,我这里直接在Springboot的test中进行测试
>
> ```
`import com.alibaba.fastjson.JSON;
import com.zdltech.zdlesapi.bean.UserItemBean;
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.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
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.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermsQueryBuilder;
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 java.io.IOException;
import java.util.ArrayList;
/**
* API 7.8.0 api接口测试
*/
@SpringBootTest
class ZdlEsApiApplicationTests {
@Autowired
private RestHighLevelClient restHighLevelClient;
@Test
void contextLoads() {
}
/**
* 索引创建 Request
*/
@Test
void testCreateIndex() {
//创建请求
CreateIndexRequest createIndexRequest = new CreateIndexRequest("zdljava1");
// 客户端执行请求
try {
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取索引
*/
@Test
void testExistIndex() {
//创建索引请求
GetIndexRequest getIndexRequest = new GetIndexRequest("zdljava1");
// 客户端执行请求
boolean exists = false;
try {
exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(exists);
}
/**
* 删除索引
*/
@Test
void testDeleteIndex() {
//创建删除索引请求
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("zdljava1");
//客户端执行请求
try {
AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 添加文档
*/
@Test
void testAddDocument() {
//创建对象
UserItemBean itemBean = new UserItemBean("张东领", 30);
//创建请求
IndexRequest indexRequest = new IndexRequest("zdljava1");//相当于数据库
//设置规格
indexRequest.id("1");//文档 相当于 表
indexRequest.timeout(TimeValue.timeValueSeconds(1));
//设置数据
indexRequest.source(JSON.toJSONString(itemBean), XContentType.JSON);
// 客户端执行请求
try {
IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexResponse);
System.out.println(JSON.toJSONString(indexResponse));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取文档
*/
@Test
void testGetDocument() {
//构建请求参数
GetRequest getRequest = new GetRequest("zdljava1", "1");
try {
boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(documentFields));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 更新文档
*/
@Test
void testUpdateDocument() {
//构建请求
UpdateRequest updateRequest = new UpdateRequest("zdljava1", "1");
updateRequest.timeout("1s");
UserItemBean userItemBean = new UserItemBean("张东领01", 33);
updateRequest.doc(JSON.toJSONString(userItemBean), XContentType.JSON);
try {
UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(updateResponse));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除文档
*/
@Test
void testDeleteDocument() {
//构建请求
DeleteRequest request = new DeleteRequest("zdljava1");
request.id("1");
request.timeout("1s");
//客户端执行请求
try {
DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(deleteResponse));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 批量
*/
@Test
void testBRequest() {
BulkRequest request = new BulkRequest();
request.timeout("10s");
ArrayList<UserItemBean> data = new ArrayList<>();
data.add(new UserItemBean("zhangsan", 6));
data.add(new UserItemBean("lisi", 18));
data.add(new UserItemBean("wangwu", 1000));
data.add(new UserItemBean("liuche", 890));
for (int i = 0; i < data.size(); i++) {
request.add(
new IndexRequest("zdljava1").id("" + (i + 5)).source(JSON.toJSONString(data.get(i)), XContentType.JSON)
);
}
try {
BulkResponse bulkItemResponses = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(bulkItemResponses));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 查询
*/
@Test
void testSearchRequest(){
SearchRequest searchRequest = new SearchRequest("zdljava1");
//构建搜索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.highlighter();
// 搜索Query
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("userName.keyword", "张三","李四");
// TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("userName", "zhangsan","lisi");
// QueryBuilders.matchAllQuery();
searchSourceBuilder.query(termsQueryBuilder);
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse));
for (SearchHit item: searchResponse.getHits().getHits()) {
System.out.println("================");
System.out.println(item.getSourceAsMap());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
`
这里就是整个Spring boot集成ElasticSearch,并使用API进行ElasticSearch的数据操作
💬 评论