一、环境准备
springboot整合ElasticSearch:https://editor.csdn.net/md/?articleId=119530392
在此基础上
加上User
类以及fastjson
依赖
User类
package com.zzuli.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
二、对文档进行操作
前提是创建一个名为test_index
的索引
//测试索引的创建
@Test
void contextLoads() throws IOException {
//创建索引请求
CreateIndexRequest request = new CreateIndexRequest("test_index");
//客户端执行请求,并响应
CreateIndexResponse createIndexResponse =
restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
并注入RestHighLevelClient
类
@Resource
private RestHighLevelClient restHighLevelClient;
2.1、添加文档
//添加文档
@Test
void testAddDocument() throws IOException {
//创建对象
User user= new User("test1",12);
//创建请求
IndexRequest request = new IndexRequest("test_index");
//规则 put /test_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
//数据放入请求,数据需要转化为JSON字符串
request.source(JSON.toJSONString(user), XContentType.JSON);
//发送请求
IndexResponse indexResponse = restHighLevelClient.index(request,RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}
2.2、判断文档是否存在
//判断文档是否存在
@Test
void testExists() throws IOException {
GetRequest request = new GetRequest("test_index","1");
boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
2.3、获取文档信息
@Test
void testGetDocment() throws IOException {
//请求
GetRequest request = new GetRequest("test_index","1");
//响应
GetResponse response = restHighLevelClient.get(request,RequestOptions.DEFAULT);
//打印文档内容
System.out.println(response.getSource());
//获取响应的全部内容
System.out.println(response);
}
2.4、 更新文档
@Test
void updateDocument() throws IOException {
//请求
UpdateRequest request = new UpdateRequest("test_index","1");
request.timeout("1s");
//写入修改数据
User user = new User("xiaoming",18);
request.doc(JSON.toJSONString(user),XContentType.JSON);
//响应
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
2.5、删除文档记录
//删除文档记录
@Test
void deleteDoc() throws IOException {
//请求
DeleteRequest request = new DeleteRequest("test_index","1");
request.timeout("1s");
//响应
DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
2.6、批量插入数据
//批量插入数据
@Test
void testBulkRequest() throws IOException {
BulkRequest request = new BulkRequest();
request.timeout("5s");
ArrayList<User> userArrayList = new ArrayList<>();
userArrayList.add(new User("test1",1));
userArrayList.add(new User("test2",2));
userArrayList.add(new User("test3",3));
userArrayList.add(new User("test4",4));
userArrayList.add(new User("test5",5));
//批量处理请求
for (int i = 0; i < userArrayList.size(); i++) {
//批量更新与删除在这里修改即可
//这里不屑id,会自动生成
request.add(
new IndexRequest("test_index")
.id(""+(i+1))
.source(JSON.toJSONString(userArrayList.get(i)),XContentType.JSON)
);
}
//响应
BulkResponse responses = restHighLevelClient.bulk(request,RequestOptions.DEFAULT);
//false表示没有失败
System.out.println(responses.hasFailures());
}
false表示没有失败,即插入成功
2.7、查询文档
查询的API比较多,这里用最基本的精确查询为例子
//查询文档
@Test
void testSearch() throws IOException {
SearchRequest searchRequest = new SearchRequest("test_index");
//构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//QueryBuilders.termQuery()为精确查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","test1");
sourceBuilder.query(termQueryBuilder);
//设置超时时间,超过这个时间就请求失败
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
//响应
SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse));
System.out.println("+++++++++++++++++++++++++++++++");
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}