创建users实体
image.png

  1. //引入lombok
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. <optional>true</optional>
  6. </dependency>
  7. //引入fastjson
  8. <dependency>
  9. <groupId>com.alibaba</groupId>
  10. <artifactId>fastjson</artifactId>
  11. <version>1.2.70</version>
  12. </dependency>

1. 添加文档

  1. //添加文档
  2. @Test
  3. void testAddDocument() throws IOException {
  4. //1.创建对象
  5. User user = new User("狂神说", 23);
  6. //创建请求
  7. IndexRequest request = new IndexRequest("kuang_index");
  8. //规则 put /kuang_index/_doc/1
  9. request.id("1");
  10. request.timeout(TimeValue.timeValueSeconds(1));
  11. request.timeout("1s");
  12. //将我们的数据放入请求json
  13. //把对象转化为json
  14. request.source(JSON.toJSONString(user), XContentType.JSON);
  15. //客户端发送请求,获取响应的结构
  16. IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
  17. System.out.println(index.toString());
  18. System.out.println(index.status());//对应我们命令返回的状态CREATED
  19. }

image.png

2.判断是否存在

  1. //获取文档,先要判断是否存在
  2. @Test
  3. void testIsExists() throws IOException {
  4. GetRequest getRequest = new GetRequest("kuang_index", "1");
  5. //不获取返回的_source的上下文,这么做效率更高
  6. getRequest.fetchSourceContext(new FetchSourceContext(false));
  7. getRequest.storedFields("_none_");
  8. boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
  9. System.out.println(exists);
  10. }

3.获取文档信息

  1. //获取文档信息
  2. @Test
  3. void testGetDocument() throws IOException {
  4. GetRequest getRequest = new GetRequest("kuang_index", "1");
  5. GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
  6. String sourceAsString = getResponse.getSourceAsString();
  7. System.out.println(sourceAsString);//打印文档到的内容
  8. }

image.png

4.更新文档信息

  1. //修改文档信息
  2. @Test
  3. void updateDocument() throws IOException {
  4. UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");
  5. updateRequest.timeout("1s");
  6. User user=new User("狂神说java",18);
  7. updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
  8. UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
  9. System.out.println(update.status()); //查看更新状态
  10. }

image.png

5.删除文档信息

  1. //删除文档信息
  2. @Test
  3. void deleteDocument() throws IOException {
  4. DeleteRequest deleteRequest = new DeleteRequest("kuang_index", "1");
  5. DeleteResponse delete = restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);
  6. System.out.println(delete.status()); //查看删除状态
  7. }

image.png

6.批量操作

  1. //测试批量添加文档信息
  2. @Test
  3. void bulkDocument() throws IOException {
  4. //创建批量操作对象
  5. BulkRequest bulkRequest = new BulkRequest();
  6. bulkRequest.timeout("10s");
  7. ArrayList<User> list = new ArrayList<>();
  8. list.add(new User("张三1",12));
  9. list.add(new User("张三2",12));
  10. list.add(new User("张三3",12));
  11. list.add(new User("张三4",12));
  12. list.add(new User("张三5",12));
  13. for (int i=0;i<list.size();i++){
  14. bulkRequest.add(
  15. new IndexRequest("kuang_index").id(""+(i+1))
  16. .source(JSON.toJSONString(list.get(i)),XContentType.JSON));
  17. }
  18. //发送请求
  19. BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
  20. System.out.println(bulk.hasFailures()); //查看状态,是否失败,返回false代表成功
  21. }

image.png
image.png

7.查询文档信息

  1. //测试查询文档信息
  2. //SearchRequest 搜索请求
  3. //SearchSourceBuilder 条件构造
  4. //HighlightBuilder 构造高亮
  5. //TermQueryBuilder 精确查询
  6. //MatchQueryBuilder 匹配所有
  7. @Test
  8. void search() throws IOException {
  9. //创建请求对象
  10. SearchRequest searchRequest = new SearchRequest("kuang_index");
  11. //构造搜索条件
  12. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  13. //使用工具类构造搜索信息
  14. //查询条件,我们可以使用QueryBuilders工具来实现
  15. //QueryBuilders.termQuery精确
  16. //QueryBuilders.matchQuery()匹配所有
  17. MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "张三1");
  18. searchSourceBuilder.query(matchQueryBuilder);
  19. searchRequest.source(searchSourceBuilder);
  20. //发送请求
  21. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  22. System.out.println(JSON.toJSONString(searchResponse.getHits())); //Hits对象就包含查询的各种信息
  23. System.out.println("--------------------------------------------------");
  24. for(SearchHit documentFields:searchResponse.getHits().getHits()){
  25. System.out.println(documentFields.getSourceAsMap());
  26. }

image.png
结果:

  1. {"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对象的方法中找到对应的方法:
十、关于文档的API操作 - 图10

十、关于文档的API操作 - 图11