集成SpringBoot
学习来自于狂神 www.bilibili.com/video/BV17a… 首先看官方文档
高级的客户端本质是封装了低级的客户端
- 导入依赖
<repositories>
<repository>
<id>es-snapshots</id>
<name>elasticsearch snapshot repo</name>
<url>https://snapshots.elastic.co/maven/</url>
</repository>
</repositories>
必须依赖于两个核心包
- 找对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
// 用完了要关闭
client.close();
- 分析这个类当中的方法
配置一个基本项目
- 记得查看es版本依赖和本地的一样,否则会出现连不上的问题
- 和上面第二点说的一样,我这边创建一个springboot的项目用@Bean去注入我所自己配置的一个RestHighLevelClient
- 接下来是具体的api测试
创建索引
void contextLoads() throws IOException {
// create index
CreateIndexRequest request = new CreateIndexRequest("kuang_index");
// execute
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println("createIndexResponse" + createIndexResponse);
}
判断一个索引在不在 返回true
void TestExist() throws Exception{
GetIndexRequest requestGet = new GetIndexRequest("kuang_index");
boolean exists = client.indices().exists(requestGet, RequestOptions.DEFAULT);
System.out.println("exists:" + exists);
}
删除索引 这边的isAcknowledged 会返回true
void TestDelete() throws Exception{
DeleteIndexRequest request = new DeleteIndexRequest("kuang_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println("delete:" + delete.isAcknowledged());
}
操作文档~~~~
首先创建一个对象
@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
添加文档
void testAddDocument() throws Exception{
User user = new User("Daniel",27);
IndexRequest indexRequest = new IndexRequest("kuang_index");
// PUT /kuang_index/_doc/1
indexRequest.id("1");
indexRequest.timeout(TimeValue.timeValueSeconds(1));
indexRequest.timeout("1s");
// data -----> request
indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
// client send
IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println("add user:" + index.toString());
}
查看文档 包括具体信息 exist/get
void testGetDocument() throws Exception{
// get /index/_doc/1
GetRequest request = new GetRequest("kuang_index","1");
// no get _source
request.fetchSourceContext(new FetchSourceContext(false));
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println("exists:" + exists);
GetRequest request = new GetRequest("kuang_index","1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsMap());
System.out.println(response);
}
更新文档信息
void testUpdate() throws Exception{
UpdateRequest request = new UpdateRequest("kuang_index", "1");
request.timeout("1s");
User user = new User("Daniel",20);
request.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
System.out.println(update.status());
}
删除文档
void testDelete() throws Exception{
DeleteRequest request = new DeleteRequest("kuang_index","3");
request.timeout("1s");
DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
批量操作,如果需要批量更新,批量删除,在for循环里面写
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
List<User> userList = new ArrayList<>();
userList.add(new User("Daneil01",1));
userList.add(new User("Daneil02",2));
userList.add(new User("Daneil03",3));
userList.add(new User("Daneil04",4));
userList.add(new User("Daneil05",5));
userList.add(new User("Daneil06",6));
for (int i = 0; i < userList.size(); i++) {
bulkRequest.add(new IndexRequest("kuang_index")
.id("" + (i+1))
.source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
);
}
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures());
搜索批量数据,还有一些精确,全部,高亮操作可以查看 sourceBuilder 里面的接口
void getBatchInfo() throws Exception {
SearchRequest searchRequest = new SearchRequest("kuang_index");
// query
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// term/match/
// TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "Daniel01");
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
// sourceBuilder.query(termQueryBuilder);
sourceBuilder.query(matchAllQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
SearchResponse search = client.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(search.getHits()));
System.out.println("==================================");
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}