官网:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
狂神说:https://space.bilibili.com/95256449/channel/detail?cid=146244
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置
es远程配置
@Configuration
public class ESConfig {
@Bean
public RestHighLevelClient client(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")
));
return client;
}
}
代码
索引层面
自动注入之前配置的bean
@Autowired
private RestHighLevelClient client; //变量名要和配置的方法名一样
创建索引
@Test
void createIndex() throws IOException {
//1,创建索引请求
CreateIndexRequest request = new CreateIndexRequest("api");
//2,客户端执行请求 createIndexResponse,请求后获得相应
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse.isAcknowledged());
}
结果
判断索引存不存在
@Test
void existIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("api");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
删除索引
@Test
void delIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("ajie_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
三个api大同小异
文档层面
先创建一个实体类,方便封装
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
创建一个文档
@Test
void addDocument() throws IOException {
//创建对象
User user = new User("ajie", 12);
//创建请求
IndexRequest request = new IndexRequest("ajie_index");
//put 添加数据
request.id("1"); //id
request.timeout(TimeValue.timeValueSeconds(1));//超时时间
//将数据转换为json 放入请求
request.source(JSON.toJSONString(user), XContentType.JSON);
// 客户端发送请求,获取响应结果
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status()); //返回当前请求的状态
}
效果:
判断文档是否存在
@Test
void existDocument() throws IOException {
GetRequest request = new GetRequest("ajie", "1");
// 不获取上下文,只判断存不存在
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
// 通过客户端发送请求
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
调用文档信息
@Test
void getDocument() throws IOException {
//查询 "ajie" 这个索引的 id为 1 的信息
GetRequest request = new GetRequest("api", "1");
// 通过客户端发送请求,拿到文档数据
GetResponse documentFields = client.get(request, RequestOptions.DEFAULT);
//通过map输出
System.out.println(documentFields.getSource());
}
更改文档信息
@Test
void updateDocument() throws IOException {
//创建一个更新请求
UpdateRequest updateRequest = new UpdateRequest("api", "1");
//设置超时时间
updateRequest.timeout("1s");
//将数据转为json格式,进行封装
updateRequest.doc(JSON.toJSONString(new User("zzw", 12)), XContentType.JSON);
// 将封装好的数据通过客户端发送出去
UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
//相应码
System.out.println(updateResponse.status());
}
删除文档信息
@Test
void deleteDocument() throws IOException {
//创建一个删除请求
DeleteRequest request = new DeleteRequest("api", "1");
//设置超时时间
request.timeout("1s");
// 通过客户端发送请求
DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
批量插入数据
@Test
void bulkDocument() throws IOException {
//创建批量请求
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> list = new ArrayList<>();
list.add(new User("ajie",1));
list.add(new User("zzw",2));
list.add(new User("dab",13));
list.add(new User("庄忠旺",132));
list.add(new User("nt",132));
list.add(new User("大饼",114));
list.add(new User("奶哥",14));
//通过for循环依次插入
for (int i = 1; i < list.size(); i++) {
bulkRequest.add(
new IndexRequest("api")
.id(""+(i+1))
.source(JSON.toJSONString(list.get(i)),XContentType.JSON)
);
}
// 通过客户端发送请求
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
// 获得状态码
System.out.println(bulk.status());
}
查询
@Test
void searchDocument() throws IOException {
SearchRequest searchRequest = new SearchRequest("api");
//构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// sourceBuilder.from(); 分页操作
// sourceBuilder.size();
//查询条件
/**
* termQuery 精确查询
*
* matchAllQuery() 匹配所有
*/
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zzw");
//查询器
sourceBuilder.query(termQueryBuilder);
//设置超时时间
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
//客户端发送请求
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
//获得hits里的数据
System.out.println(JSON.toJSONString(search.getHits()));
System.out.println("========================================");
//将所有符合条件的循环输出
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}