Springboot如何集成Elasticsearch(springboot,开发技术)

时间:2024-05-06 10:40:42 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    集成配置步骤

    步骤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

    Springboot如何集成Elasticsearch

    步骤3:配置 Elaseticsearch 客户端

    @Data@Configuration@ConfigurationProperties(prefix="elasticsearch")publicclassElasticSearchConfigextendsAbstractElasticsearchConfiguration{privateStringhost;privateIntegerport;@OverridepublicRestHighLevelClientelasticsearchClient(){returnnewRestHighLevelClient(RestClient.builder(newHttpHost(host,port)));}}

    Springboot如何集成Elasticsearch

    步骤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;}

    Springboot如何集成Elasticsearch

    步骤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>{}

    整个相关类创建完成后,项目结构应该如下图所示:

    Springboot如何集成Elasticsearch

    相关功能实现

    这里以实际功能举例,并列出 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();}

    测试效果:

    Springboot如何集成Elasticsearch

    2. 修改文档

    【注】新增文档和修改文档操作,dao 层都是调用的 save() 方法,当 id 不存在的时候,ES(ElasticSearch)就会执行新增操作,当 id 对象已经存在的时候,就会执行修改操作。

    controller 层:

    @PostMapping("/update")publicStringupdate(@RequestBodyUseruser){userService.save(user);return"修改成功";}

    service 层:

    @OverridepublicLongsave(Useruser){userDao.save(user);returnuser.getId();}

    测试效果:

    Springboot如何集成Elasticsearch

    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;}

    测试效果:

    Springboot如何集成Elasticsearch

    4. 根据ID删除文档

    controller 层:

    @DeleteMapping("/{id}")publicStringdeleteById(@PathVariable("id")Longid){userService.deleteById(id);return"删除成功";}

    service 层:

    @OverridepublicvoiddeleteById(Longid){userDao.deleteById(id);}

    测试效果:

    Springboot如何集成Elasticsearch

    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;}

    测试效果:

    Springboot如何集成Elasticsearch

    6. 条件查询(单个条件)

    如:查询name包含"玛丽"的数据

    controller 层:

    @GetMapping("/listByName")publicList<User>listByName(Stringname){returnuserService.getListByName(name);}

    service 层:

    @OverridepublicList<User>getListByName(Stringname){returnuserDao.findByName(name);}

    dao 层:测试效果:

    Springboot如何集成Elasticsearch

    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);

    Springboot如何集成Elasticsearch

    8. 分页查询(降序)

    controller 层:

    @GetMapping("/listOrderByAgeDesc")publicList<User>listOrderByAgeDesc(){returnuserService.getListOrderByAgeDesc();}

    service 层:

    @OverridepublicList<User>getListOrderByAgeDesc(){returnuserDao.findByOrderByAgeDesc();}

    dao 层:

    List<User>findByOrderByAgeDesc();

    测试效果:

    Springboot如何集成Elasticsearch

    9. 分页查询(升序)

    controller 层:

    @GetMapping("/listOrderByAgeAsc")publicList<User>listOrderByAgeAsc(){returnuserService.getListOrderByAgeAsc();}

    service 层:

    @OverridepublicList<User>getListOrderByAgeAsc(){returnuserDao.findByOrderByAgeAsc();}

    dao 层:

    List<User>findByOrderByAgeAsc();

    测试效果:

    Springboot如何集成Elasticsearch

    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);}

    测试效果:

    Springboot如何集成Elasticsearch

    11. 范围查询( > )

    controller 层:

    @GetMapping("/listGreaterThanAge")publicList<User>listGreaterThanAge(Integerage){returnuserService.getListGreaterThanAge(age);}

    service 层:

    @OverridepublicList<User>getListGreaterThanAge(Integerage){returnuserDao.findByAgeGreaterThan(age);}

    dao 层:

    List<User>findByAgeGreaterThan(Integerage);

    测试效果:

    Springboot如何集成Elasticsearch

    12. 范围查询( >= )

    controller 层:

    @GetMapping("/listGreaterThanEqualAge")publicList<User>listGreaterThanEqualAge(Integerage){returnuserService.getListGreaterThanEqualAge(age);}

    service 层:

    @OverridepublicList<User>getListGreaterThanEqualAge(Integerage){returnuserDao.findByAgeGreaterThanEqual(age);}

    dao 层:

    List<User>findByAgeGreaterThanEqual(Integerage);

    测试效果:

    Springboot如何集成Elasticsearch

    13. 范围查询( < )

    controller 层:

    @GetMapping("/listLessThanAge")publicList<User>listLessThanAge(Integerage){returnuserService.getListLessThanAge(age);}

    service 层:

    @OverridepublicList<User>getListLessThanAge(Integerage){returnuserDao.findByAgeLessThan(age);}

    dao 层:

    List<User>findByAgeLessThan(Integerage);

    测试效果:

    Springboot如何集成Elasticsearch

    14. 范围查询( <= )

    controller 层:

    @GetMapping("/listLessThanEqualAge")publicList<User>listLessThanEqualAge(Integerage){returnuserService.getListLessThanEqualAge(age);}

    service 层:

    @OverridepublicList<User>getListLessThanEqualAge(Integerage){returnuserDao.findByAgeLessThanEqual(age);}

    dao 层:

    List<User>findByAgeLessThanEqual(Integerage);

    测试效果:

    Springboot如何集成Elasticsearch

    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的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:怎么在Vue中使用debouce防抖函数下一篇:

    21 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18