【Elasticsearch】- 使用JavaAPI操作elasticsearch

x33g5p2x  于2022-06-13 转载在 ElasticSearch  
字(7.8k)|赞(0)|评价(0)|浏览(671)

工程准备

创建maven工程并引入Elasticsearch相关依赖:

  1. <dependency>
  2. <groupId>org.elasticsearch</groupId>
  3. <artifactId>elasticsearch</artifactId>
  4. <version>7.8.0</version>
  5. </dependency>
  6. <!-- elasticsearch 的客户端 -->
  7. <dependency>
  8. <groupId>org.elasticsearch.client</groupId>
  9. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  10. <version>7.8.0</version>
  11. </dependency>
  12. <!-- elasticsearch 依赖 2.x 的 log4j -->
  13. <dependency>
  14. <groupId>org.apache.logging.log4j</groupId>
  15. <artifactId>log4j-api</artifactId>
  16. <version>2.8.2</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.apache.logging.log4j</groupId>
  20. <artifactId>log4j-core</artifactId>
  21. <version>2.8.2</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>com.fasterxml.jackson.core</groupId>
  25. <artifactId>jackson-databind</artifactId>
  26. <version>2.9.9</version>
  27. </dependency>
  28. <!-- junit 单元测试 -->
  29. <dependency>
  30. <groupId>junit</groupId>
  31. <artifactId>junit</artifactId>
  32. <version>4.12</version>
  33. </dependency>

索引操作

创建索引

  1. @Test
  2. public void index_create_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. //创建索引
  8. CreateIndexRequest request = new CreateIndexRequest("student");
  9. CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);
  10. boolean acknowledged = createIndexResponse.isAcknowledged();
  11. System.out.println("响应状态:"+acknowledged);
  12. //关闭Elasticsearch客户端
  13. esClient.close();
  14. }

使用Postman测试索引是否成功:

查询索引

  1. @Test
  2. public void index_get_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. //查询索引
  8. GetIndexRequest getIndexRequest = new GetIndexRequest("student");
  9. GetIndexResponse getIndexResponse = esClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);
  10. System.out.println(getIndexResponse.getAliases());
  11. System.out.println(getIndexResponse.getMappings());
  12. System.out.println(getIndexResponse.getSettings());
  13. //关闭Elasticsearch客户端
  14. esClient.close();
  15. }

删除索引

  1. @Test
  2. public void index_delete_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. //删除索引
  8. DeleteIndexRequest getIndexRequest = new DeleteIndexRequest("student");
  9. AcknowledgedResponse delete = esClient.indices().delete(getIndexRequest, RequestOptions.DEFAULT);
  10. System.out.println(delete.isAcknowledged());
  11. //关闭Elasticsearch客户端
  12. esClient.close();
  13. }

文档操作

进行文档操作前,先创建文档数据对应的java实体类Student:

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. @ToString
  5. public class Student {
  6. private String name;
  7. private int age;
  8. private String sex;
  9. private String level;
  10. }

添加文档数据

  1. @Test
  2. public void doc_insert_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. IndexRequest request = new IndexRequest();
  8. request.index("student").id("10000");
  9. Student student = new Student();
  10. student.setName("王同学");
  11. student.setAge(22);
  12. student.setSex("男");
  13. student.setLevel("研究生");
  14. ObjectMapper mapper = new ObjectMapper();
  15. String studentJson = mapper.writeValueAsString(student);
  16. request.source(studentJson, XContentType.JSON);
  17. IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
  18. System.out.println(response.getResult());
  19. //关闭Elasticsearch客户端
  20. esClient.close();
  21. }

批量添加文档数据

  1. @Test
  2. public void doc_insert_batch_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. BulkRequest request = new BulkRequest();
  8. request.add(new IndexRequest().index("student").id("10001").source(XContentType.JSON, "name", "张三"));
  9. request.add(new IndexRequest().index("student").id("10002").source(XContentType.JSON, "name", "李四"));
  10. request.add(new IndexRequest().index("student").id("10003").source(XContentType.JSON, "name", "王五"));
  11. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
  12. System.out.println(response.getItems());
  13. //关闭Elasticsearch客户端
  14. esClient.close();
  15. }

修改文档数据

  1. @Test
  2. public void doc_update_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. UpdateRequest request = new UpdateRequest();
  8. request.index("student").id("10000");
  9. request.doc(XContentType.JSON,"sex","女");
  10. UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);
  11. System.out.println(response.getResult());
  12. //关闭Elasticsearch客户端
  13. esClient.close();
  14. }

根据id查询文档数据

  1. @Test
  2. public void doc_search_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. GetRequest request = new GetRequest();
  8. request.index("student").id("10000");
  9. GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
  10. System.out.println(response.getSourceAsString());
  11. //关闭Elasticsearch客户端
  12. esClient.close();
  13. }

查询当前索引所有文档数据

  1. @Test
  2. public void doc_search_all_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. SearchRequest request = new SearchRequest();
  8. request.indices("student");
  9. request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
  10. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  11. SearchHits hits = response.getHits();
  12. System.out.println(hits.getTotalHits());
  13. for(SearchHit hit:hits){
  14. System.out.println(hit.getSourceAsString());
  15. }
  16. //关闭Elasticsearch客户端
  17. esClient.close();
  18. }

分页查询

  1. @Test
  2. public void doc_search_size_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. SearchRequest request = new SearchRequest();
  8. request.indices("student");
  9. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
  10. builder.from(0);
  11. builder.size(2);
  12. request.source(builder);
  13. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  14. SearchHits hits = response.getHits();
  15. System.out.println(hits.getTotalHits());
  16. for(SearchHit hit:hits){
  17. System.out.println(hit.getSourceAsString());
  18. }
  19. //关闭Elasticsearch客户端
  20. esClient.close();
  21. }

模糊查询

  1. @Test
  2. public void doc_search_match_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. SearchRequest request = new SearchRequest();
  8. request.indices("student");
  9. request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("name","王")));
  10. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  11. SearchHits hits = response.getHits();
  12. System.out.println(hits.getTotalHits());
  13. for(SearchHit hit:hits){
  14. System.out.println(hit.getSourceAsString());
  15. }
  16. //关闭Elasticsearch客户端
  17. esClient.close();
  18. }

删除文档数据

  1. @Test
  2. public void doc_delete_test() throws IOException {
  3. //创建Elasticsearch客户端
  4. RestHighLevelClient esClient = new RestHighLevelClient(
  5. RestClient.builder(new HttpHost("localhost",9200,"http"))
  6. );
  7. DeleteRequest request = new DeleteRequest();
  8. request.index("student").id("10000");
  9. DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
  10. System.out.println(response.getResult());
  11. //关闭Elasticsearch客户端
  12. esClient.close();
  13. }

相关文章