创建项目

导入依赖

注意依赖版本和安装的版本一致

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <elasticsearch.version>7.6.2</elasticsearch.version>
  4. </properties>

创建并编写配置类

  1. @Configuration
  2. public class ElasticSearchConfig {
  3. // 注册 rest高级客户端
  4. @Bean
  5. public RestHighLevelClient restHighLevelClient(){
  6. RestHighLevelClient client = new RestHighLevelClient(
  7. RestClient.builder(
  8. new HttpHost("127.0.0.1",9200,"http")
  9. )
  10. );
  11. return client;
  12. }
  13. }

测试

所有测试均在 SpringbootElasticsearchApplicationTests中编写

创建索引

  1. @Test
  2. void testCreateIndex() throws IOException {
  3. //1、创建索引请求
  4. CreateIndexRequest request = new CreateIndexRequest("jie-index");
  5. //2、客户端执行创建请求 请求后获得响应
  6. CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
  7. System.out.println(response);
  8. }

image.png

判断索引存在

  1. @Test
  2. void testExistIndex() throws IOException {
  3. GetIndexRequest request = new GetIndexRequest("jie-index");
  4. boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
  5. System.out.println(exists);
  6. }

image.png

删除索引

  1. @Test
  2. void testDeleteIndex() throws IOException {
  3. DeleteIndexRequest request = new DeleteIndexRequest("jie-index");
  4. AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
  5. System.out.println(delete);
  6. }

image.png
image.png

添加文档

  1. //测试添加文档
  2. @Test
  3. void testAddDocument() throws IOException {
  4. //创建对象
  5. User user = new User("蛋黄派", 12);
  6. //创建请求
  7. IndexRequest request = new IndexRequest("jie-index");
  8. //规则 PUT / jie_index/_doc/1
  9. request.id("1");
  10. request.timeout(TimeValue.timeValueSeconds(1));
  11. request.timeout("1s");
  12. //将我们的数据放入请求 json
  13. request.source(JSON.toJSONString(user), XContentType.JSON);
  14. //客户端发送请求 获取响应结果
  15. IndexResponse index = client.index(request, RequestOptions.DEFAULT);
  16. System.out.println(index.toString());
  17. System.out.println(index.status()); //对应我们命令返回的状态
  18. }

获取文档判断是否存在

  1. //测试获取文档,判断是否存在 get /index/doc/1
  2. @Test
  3. void testIsExistDocument() throws IOException {
  4. GetRequest request = new GetRequest("jie-index", "1");
  5. // 不获取返回的 _source 的上下文
  6. request.fetchSourceContext(new FetchSourceContext(false));
  7. request.storedFields("_none_");
  8. boolean exists = client.exists(request, RequestOptions.DEFAULT);
  9. System.out.println(exists);
  10. }

获取文档信息

  1. //测试获取文档的信息
  2. @Test
  3. void testGetDocument() throws IOException {
  4. GetRequest request = new GetRequest("jie-index", "1");
  5. GetResponse response = client.get(request, RequestOptions.DEFAULT);
  6. String source = response.getSourceAsString();
  7. System.out.println(source);
  8. System.out.println(response);
  9. }

更新文档信息

  1. //更新文档的信息
  2. @Test
  3. void testUpdateDocument() throws IOException {
  4. UpdateRequest request = new UpdateRequest("jie-index", "1");
  5. request.timeout("1s");
  6. User user = new User("巧克力派", 13);
  7. request.doc(JSON.toJSONString(user),XContentType.JSON);
  8. UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
  9. System.out.println(update.status());
  10. System.out.println(update);
  11. }

删除文档记录

  1. //删除文档记录
  2. @Test
  3. void testDeleteDocument() throws IOException {
  4. DeleteRequest request = new DeleteRequest("jie-index", "1");
  5. request.timeout("1s");
  6. DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
  7. System.out.println(delete.status());
  8. }

批量插入数据

  1. //特殊的 批量插入数据
  2. @Test
  3. void testBulkRequest() throws IOException {
  4. BulkRequest bulkRequest = new BulkRequest();
  5. bulkRequest.timeout("1s");
  6. ArrayList<User> userList = new ArrayList<>();
  7. userList.add(new User("香芋派",11));
  8. userList.add(new User("紫薯派",12));
  9. userList.add(new User("苹果派",13));
  10. userList.add(new User("菠萝派",14));
  11. userList.add(new User("榴莲派",15));
  12. for (int i = 0; i < userList.size(); i++) {
  13. bulkRequest.add(new IndexRequest("jie-index")
  14. .id(""+(i+1))
  15. .source(JSON.toJSONString(userList.get(i)),XContentType.JSON));
  16. }
  17. BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
  18. System.out.println(bulk.hasFailures());
  19. }

查询

  1. //查询
  2. @Test
  3. void testSearch() throws IOException {
  4. SearchRequest searchRequest = new SearchRequest("jie-index");
  5. //构建搜素条件
  6. SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
  7. //查询条件 可以使用QueryBuilders工具来实现
  8. // QueryBuilders.termQuery() 精确
  9. // QueryBuilders.matchAllQuery() 匹配所有
  10. TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword", "苹果派"); //中文要使用 keyword
  11. sourceBuilder.query(termQueryBuilder);
  12. sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
  13. searchRequest.source(sourceBuilder);
  14. SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
  15. System.out.println(JSON.toJSONString(searchResponse.getHits()));
  16. System.out.println("++++++++++++++++++++++++++++++++++++++++");
  17. for (SearchHit documentFields : searchResponse.getHits().getHits()) {
  18. System.out.println(documentFields.getSourceAsMap());
  19. }
  20. }