创建users实体
//引入lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
//引入fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
- 添加文档
//添加文档
@Test
void testAddDocument() throws IOException {
//1.创建对象
User user = new User("狂神说", 23);
//创建请求
IndexRequest request = new IndexRequest("kuang_index");
//规则 put /kuang_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
//将我们的数据放入请求json
//把对象转化为json
request.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求,获取响应的结构
IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(index.toString());
System.out.println(index.status());//对应我们命令返回的状态CREATED
}
2.判断是否存在
//获取文档,先要判断是否存在
@Test
void testIsExists() throws IOException {
GetRequest getRequest = new GetRequest("kuang_index", "1");
//不获取返回的_source的上下文,这么做效率更高
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
3.获取文档信息
//获取文档信息
@Test
void testGetDocument() throws IOException {
GetRequest getRequest = new GetRequest("kuang_index", "1");
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
String sourceAsString = getResponse.getSourceAsString();
System.out.println(sourceAsString);//打印文档到的内容
}
4.更新文档信息
//修改文档信息
@Test
void updateDocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");
updateRequest.timeout("1s");
User user=new User("狂神说java",18);
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.status()); //查看更新状态
}
5.删除文档信息
//删除文档信息
@Test
void deleteDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("kuang_index", "1");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);
System.out.println(delete.status()); //查看删除状态
}
6.批量操作
//测试批量添加文档信息
@Test
void bulkDocument() throws IOException {
//创建批量操作对象
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> list = new ArrayList<>();
list.add(new User("张三1",12));
list.add(new User("张三2",12));
list.add(new User("张三3",12));
list.add(new User("张三4",12));
list.add(new User("张三5",12));
for (int i=0;i<list.size();i++){
bulkRequest.add(
new IndexRequest("kuang_index").id(""+(i+1))
.source(JSON.toJSONString(list.get(i)),XContentType.JSON));
}
//发送请求
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures()); //查看状态,是否失败,返回false代表成功
}
7.查询文档信息
//测试查询文档信息
//SearchRequest 搜索请求
//SearchSourceBuilder 条件构造
//HighlightBuilder 构造高亮
//TermQueryBuilder 精确查询
//MatchQueryBuilder 匹配所有
@Test
void search() throws IOException {
//创建请求对象
SearchRequest searchRequest = new SearchRequest("kuang_index");
//构造搜索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//使用工具类构造搜索信息
//查询条件,我们可以使用QueryBuilders工具来实现
//QueryBuilders.termQuery精确
//QueryBuilders.matchQuery()匹配所有
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "张三1");
searchSourceBuilder.query(matchQueryBuilder);
searchRequest.source(searchSourceBuilder);
//发送请求
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse.getHits())); //Hits对象就包含查询的各种信息
System.out.println("--------------------------------------------------");
for(SearchHit documentFields:searchResponse.getHits().getHits()){
System.out.println(documentFields.getSourceAsMap());
}
结果:
{"fragment":true,"hits":[{"fields":{},"fragment":false,"highlightFields":{},"id":"1","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":2.06728,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三1","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三1\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"2","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三2","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三2\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"3","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三3","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三3\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"4","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三4","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三4\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1},{"fields":{},"fragment":false,"highlightFields":{},"id":"5","matchedQueries":[],"primaryTerm":0,"rawSortValues":[],"score":0.49293762,"seqNo":-2,"sortValues":[],"sourceAsMap":{"name":"张三5","age":12},"sourceAsString":"{\"age\":12,\"name\":\"张三5\"}","sourceRef":{"fragment":true},"type":"_doc","version":-1}],"maxScore":2.06728,"totalHits":{"relation":"EQUAL_TO","value":5}}
Hits对象中包含的是所有的查询结果信息,我们可以通过遍历想要的参数获得具体的信息。 对于复杂查询的各种操作都可以在searchSourceBuilder对象的方法中找到对应的方法: