Springboot如何集成Elasticsearch
导读:本文共6883字符,通常情况下阅读需要23分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 集成配置步骤步骤1:加入 Maven 相关依赖<!--指定Springboot版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&... ...
目录
(为您整理了一些要点),点击可以直达。集成配置步骤
步骤1:加入 Maven 相关依赖
<!--指定Springboot版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.7</version><relativePath/></parent><!--相关jar包--><dependencies><!--SpringBoot核心jar包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--web开发包:包含Tomcat和Springmvc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--ES核心包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!--lombok实体简化插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>
步骤2:配置 elasticsearch 的主机和端口
elasticsearch:host:127.0.0.1port:9200
步骤3:配置 Elaseticsearch 客户端
@Data@Configuration@ConfigurationProperties(prefix="elasticsearch")publicclassElasticSearchConfigextendsAbstractElasticsearchConfiguration{privateStringhost;privateIntegerport;@OverridepublicRestHighLevelClientelasticsearchClient(){returnnewRestHighLevelClient(RestClient.builder(newHttpHost(host,port)));}}
步骤4:创建文档实体
@Data@Document(indexName="users")publicclassUser{@Id@Field(type=FieldType.Long)privateLongid;@Field(type=FieldType.Text)privateStringname;@Field(type=FieldType.Keyword)privateStringsex;@Field(type=FieldType.Integer)privateIntegerage;@Field(type=FieldType.Text)privateStringaddress;}
步骤5:创建 controller,service, dao 层
(5.1)contrller 层
@RestController@RequestMapping("/user")publicclassUserController{@AutowiredprivateUserServiceuserService;}
(5.2)service 层
publicinterfaceUserService{}
(5.3)service 实现层(UserDao 见 5.4)
@ServicepublicclassUserServiceImplimplementsUserService{@AutowiredprivateUserDaouserDao;}
(5.4)dao 层
@RepositorypublicinterfaceUserDaoextendsElasticsearchRepository<User,Long>{}
整个相关类创建完成后,项目结构应该如下图所示:
相关功能实现
这里以实际功能举例,并列出 controller 和 service 层的实现类写法作为参考。
主流的一些功能,ES 已经给你封装,默认给与了支持(如:示例1-6),这些相关的实现不需要我们再写 dao 层,但一些较为业务性的查询,还需要自己手动来写。
1. 添加文档
controller 层:
@PostMapping("/save")publicStringsave(@RequestBodyUseruser){longid=System.currentTimeMillis();user.setId(id);userService.save(user);return"新增成功,id为:"+id;}
service 层:
@OverridepublicLongsave(Useruser){userDao.save(user);returnuser.getId();}
测试效果:
2. 修改文档
【注】新增文档和修改文档操作,dao 层都是调用的 save() 方法,当 id 不存在的时候,ES(ElasticSearch)就会执行新增操作,当 id 对象已经存在的时候,就会执行修改操作。
controller 层:
@PostMapping("/update")publicStringupdate(@RequestBodyUseruser){userService.save(user);return"修改成功";}
service 层:
@OverridepublicLongsave(Useruser){userDao.save(user);returnuser.getId();}
测试效果:
3. 根据ID查询文档
controller 层:
@GetMapping("/{id}")publicUsergetById(@PathVariable("id")Longid){returnuserService.getById(id);}
service 层:
@OverridepublicUsergetById(Longid){Optional<User>find=userDao.findById(id);if(find.isPresent()){returnfind.get();}returnnull;}
测试效果:
4. 根据ID删除文档
controller 层:
@DeleteMapping("/{id}")publicStringdeleteById(@PathVariable("id")Longid){userService.deleteById(id);return"删除成功";}
service 层:
@OverridepublicvoiddeleteById(Longid){userDao.deleteById(id);}
测试效果:
5. 查询所有文档
controller 层:
@GetMapping("/all")publicList<User>all(){returnuserService.getAll();}
service 层:
@OverridepublicList<User>getAll(){Iterable<User>users=userDao.findAll();if(users==null){returnCollections.emptyList();}List<User>userList=newArrayList<User>();users.forEach(o->userList.add(o));returnuserList;}
测试效果:
6. 条件查询(单个条件)
如:查询name包含"玛丽"的数据
controller 层:
@GetMapping("/listByName")publicList<User>listByName(Stringname){returnuserService.getListByName(name);}
service 层:
@OverridepublicList<User>getListByName(Stringname){returnuserDao.findByName(name);}
dao 层:测试效果:
7. 条件查询(多条件)
如:查询 name包含"玛丽",年龄为25的数据。
controller 层:
@GetMapping("/listByNameAndAge")publicList<User>listByNameAndAge(Stringname,Integerage){returnuserService.getListByNameAndAge(name,age);}
service 层:
@OverridepublicList<User>getListByNameAndAge(Stringname,Integerage){returnuserDao.findByNameAndAge(name,age);}
dao 层:
List<User>findByNameAndAge(Stringname,Integerage);
8. 分页查询(降序)
controller 层:
@GetMapping("/listOrderByAgeDesc")publicList<User>listOrderByAgeDesc(){returnuserService.getListOrderByAgeDesc();}
service 层:
@OverridepublicList<User>getListOrderByAgeDesc(){returnuserDao.findByOrderByAgeDesc();}
dao 层:
List<User>findByOrderByAgeDesc();
测试效果:
9. 分页查询(升序)
controller 层:
@GetMapping("/listOrderByAgeAsc")publicList<User>listOrderByAgeAsc(){returnuserService.getListOrderByAgeAsc();}
service 层:
@OverridepublicList<User>getListOrderByAgeAsc(){returnuserDao.findByOrderByAgeAsc();}
dao 层:
List<User>findByOrderByAgeAsc();
测试效果:
10. 分页查询
controller 层:
@GetMapping("/page")publicPage<User>page(IntegerpageNum,IntegerpageSize){returnuserService.getPage(pageNum,pageSize);}
service 层:
@OverridepublicPage<User>getPage(intpageNum,intpageSize){//注意,这里的pageNum是从0开始的,如果要查询第1页数据,pageNum应该为0Pageablepageable=PageRequest.of(pageNum,pageSize);returnuserDao.findAll(pageable);}
测试效果:
11. 范围查询( > )
controller 层:
@GetMapping("/listGreaterThanAge")publicList<User>listGreaterThanAge(Integerage){returnuserService.getListGreaterThanAge(age);}
service 层:
@OverridepublicList<User>getListGreaterThanAge(Integerage){returnuserDao.findByAgeGreaterThan(age);}
dao 层:
List<User>findByAgeGreaterThan(Integerage);
测试效果:
12. 范围查询( >= )
controller 层:
@GetMapping("/listGreaterThanEqualAge")publicList<User>listGreaterThanEqualAge(Integerage){returnuserService.getListGreaterThanEqualAge(age);}
service 层:
@OverridepublicList<User>getListGreaterThanEqualAge(Integerage){returnuserDao.findByAgeGreaterThanEqual(age);}
dao 层:
List<User>findByAgeGreaterThanEqual(Integerage);
测试效果:
13. 范围查询( < )
controller 层:
@GetMapping("/listLessThanAge")publicList<User>listLessThanAge(Integerage){returnuserService.getListLessThanAge(age);}
service 层:
@OverridepublicList<User>getListLessThanAge(Integerage){returnuserDao.findByAgeLessThan(age);}
dao 层:
List<User>findByAgeLessThan(Integerage);
测试效果:
14. 范围查询( <= )
controller 层:
@GetMapping("/listLessThanEqualAge")publicList<User>listLessThanEqualAge(Integerage){returnuserService.getListLessThanEqualAge(age);}
service 层:
@OverridepublicList<User>getListLessThanEqualAge(Integerage){returnuserDao.findByAgeLessThanEqual(age);}
dao 层:
List<User>findByAgeLessThanEqual(Integerage);
测试效果:
ElasticSearch中对索引的一些常用操作
1. 获取Elasticsearch中所有的index:
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
2. 获取某索引下所有的type:
获取elasticsearch索引下所有的type定义
curl -XGET 'localhost:9200/elasticsearch/_mapping'
3. 删除索引:
删除elasticsearch2索引
curl -XDELETE 'localhost:9200/elasticsearch2?pretty'
4. 删除某索引下的某type数据:
删除索引elasticsearch下的article类型
curl -XDELETE 'http://localhost:9200/elasticsearch/article/'
5. 查看某索引的某type下所有的数据:
查找elasticsearch索引中所有的类型为Company的数据
http://localhost:9200/elasticsearch/Company/_search
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Springboot如何集成Elasticsearch的详细内容,希望对您有所帮助,信息来源于网络。