千家信息网

Springboot如何集成Elasticsearch

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下Springboot如何集成Elasticsearch,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!集成
千家信息网最后更新 2026年11月04日Springboot如何集成Elasticsearch

小编给大家分享一下Springboot如何集成Elasticsearch,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    集成配置步骤

    步骤1:加入 Maven 相关依赖

        org.springframework.boot    spring-boot-starter-parent    2.5.7                     org.springframework.boot        spring-boot-starter                    org.springframework.boot        spring-boot-starter-web                    org.springframework.boot        spring-boot-starter-data-elasticsearch                    org.projectlombok        lombok        true    

    步骤2:配置 elasticsearch 的主机和端口

    elasticsearch:  host: 127.0.0.1  port: 9200

    步骤3:配置 Elaseticsearch 客户端

    @Data@Configuration@ConfigurationProperties(prefix = "elasticsearch")public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {     private String host;    private Integer port;     @Override    public RestHighLevelClient elasticsearchClient() {        return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));    } }

    步骤4:创建文档实体

    @Data@Document(indexName = "users")public class User {     @Id    @Field(type = FieldType.Long)    private Long id;     @Field(type = FieldType.Text)    private String name;     @Field(type = FieldType.Keyword)    private String sex;     @Field(type = FieldType.Integer)    private Integer age;     @Field(type = FieldType.Text)    private String address; }

    步骤5:创建 controller,service, dao 层

    (5.1)contrller 层

    @RestController@RequestMapping("/user")public class UserController {     @Autowired    private UserService userService; }

    (5.2)service 层

    public interface UserService { }

    (5.3)service 实现层(UserDao 见 5.4)

    @Servicepublic class UserServiceImpl implements UserService {     @Autowired    private UserDao userDao; }

    (5.4)dao 层

    @Repositorypublic interface UserDao extends ElasticsearchRepository { }

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

    相关功能实现

    这里以实际功能举例,并列出 controller 和 service 层的实现类写法作为参考。

    主流的一些功能,ES 已经给你封装,默认给与了支持(如:示例1-6),这些相关的实现不需要我们再写 dao 层,但一些较为业务性的查询,还需要自己手动来写。

    1. 添加文档

    controller 层:

    @PostMapping("/save")public String save(@RequestBody User user) {    long id = System.currentTimeMillis();    user.setId(id);    userService.save(user);    return "新增成功,id为:" + id;}

    service 层:

    @Overridepublic Long save(User user) {    userDao.save(user);    return user.getId();}

    测试效果:

    2. 修改文档

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

    controller 层:

    @PostMapping("/update")public String update(@RequestBody User user) {    userService.save(user);    return "修改成功";}

    service 层:

    @Overridepublic Long save(User user) {    userDao.save(user);    return user.getId();}

    测试效果:

    3. 根据ID查询文档

    controller 层:

    @GetMapping("/{id}")public User getById(@PathVariable("id") Long id) {    return userService.getById(id);}

    service 层:

    @Overridepublic User getById(Long id) {    Optional find = userDao.findById(id);    if (find.isPresent()) {        return find.get();    }    return null;}

    测试效果:

    4. 根据ID删除文档

    controller 层:

    @DeleteMapping("/{id}")public String deleteById(@PathVariable("id") Long id) {    userService.deleteById(id);    return "删除成功";}

    service 层:

    @Overridepublic void deleteById(Long id) {    userDao.deleteById(id);}

    测试效果:

    5. 查询所有文档

    controller 层:

    @GetMapping("/all")public List all() {    return userService.getAll();}

    service 层:

    @Overridepublic List getAll() {    Iterable users = userDao.findAll();    if (users == null) {        return Collections.emptyList();    }    List userList = new ArrayList();    users.forEach(o -> userList.add(o));    return userList;}

    测试效果:

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

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

    controller 层:

    @GetMapping("/listByName")public List listByName(String name) {    return userService.getListByName(name);}

    service 层:

    @Overridepublic List getListByName(String name) {    return userDao.findByName(name);}

    dao 层:测试效果:

    7. 条件查询(多条件)

    如:查询 name包含"玛丽",年龄为25的数据。

    controller 层:

    @GetMapping("/listByNameAndAge")public List listByNameAndAge(String name, Integer age) {    return userService.getListByNameAndAge(name, age);}

    service 层:

    @Overridepublic List getListByNameAndAge(String name, Integer age) {    return userDao.findByNameAndAge(name, age);}

    dao 层:

    List findByNameAndAge(String name, Integer age);

    8. 分页查询(降序)

    controller 层:

    @GetMapping("/listOrderByAgeDesc")public List listOrderByAgeDesc() {    return userService.getListOrderByAgeDesc();}

    service 层:

    @Overridepublic List getListOrderByAgeDesc() {    return userDao.findByOrderByAgeDesc();}

    dao 层:

    List findByOrderByAgeDesc();

    测试效果:

    9. 分页查询(升序)

    controller 层:

    @GetMapping("/listOrderByAgeAsc")public List listOrderByAgeAsc() {    return userService.getListOrderByAgeAsc();}

    service 层:

    @Overridepublic List getListOrderByAgeAsc() {    return userDao.findByOrderByAgeAsc();}

    dao 层:

    List findByOrderByAgeAsc();

    测试效果:

    10. 分页查询

    controller 层:

    @GetMapping("/page")public Page page(Integer pageNum, Integer pageSize) {    return userService.getPage(pageNum, pageSize);}

    service 层:

    @Overridepublic Page getPage(int pageNum, int pageSize) {    // 注意,这里的pageNum是从0开始的,如果要查询第1页数据,pageNum应该为0    Pageable pageable = PageRequest.of(pageNum, pageSize);    return userDao.findAll(pageable);}

    测试效果:

    11. 范围查询( > )

    controller 层:

    @GetMapping("/listGreaterThanAge")public List listGreaterThanAge(Integer age) {    return userService.getListGreaterThanAge(age);}

    service 层:

    @Overridepublic List getListGreaterThanAge(Integer age) {    return userDao.findByAgeGreaterThan(age);}

    dao 层:

    List findByAgeGreaterThan(Integer age);

    测试效果:

    12. 范围查询( >= )

    controller 层:

    @GetMapping("/listGreaterThanEqualAge")public List listGreaterThanEqualAge(Integer age) {    return userService.getListGreaterThanEqualAge(age);}

    service 层:

    @Overridepublic List getListGreaterThanEqualAge(Integer age) {    return userDao.findByAgeGreaterThanEqual(age);}

    dao 层:

    List findByAgeGreaterThanEqual(Integer age);

    测试效果:

    13. 范围查询( < )

    controller 层:

    @GetMapping("/listLessThanAge")public List listLessThanAge(Integer age) {    return userService.getListLessThanAge(age);}

    service 层:

    @Overridepublic List getListLessThanAge(Integer age) {    return userDao.findByAgeLessThan(age);}

    dao 层:

    List findByAgeLessThan(Integer age);

    测试效果:

    14. 范围查询( <= )

    controller 层:

    @GetMapping("/listLessThanEqualAge")public List listLessThanEqualAge(Integer age) {    return userService.getListLessThanEqualAge(age);}

    service 层:

    @Overridepublic List getListLessThanEqualAge(Integer age) {    return userDao.findByAgeLessThanEqual(age);}

    dao 层:

    List findByAgeLessThanEqual(Integer age);

    测试效果:

    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

    以上是"Springboot如何集成Elasticsearch"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    查询 效果 测试 索引 文档 数据 步骤 条件 范围 成功 功能 篇文章 配置 内容 时候 类型 玛丽 参考 不怎么 业务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技工作委员会毛军 互联网科技保险 互联网科技有限公司图片 互联网巨头科技公司 关于新基建和互联网科技 华中科技大学互联网 人人互联网科技是培训 宝灵互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 深圳育鹏互联网科技有限公司招聘 互联网数据科技专业 为客找房互联网科技公司怎么样 中国互联网有什么科技 美国互联网科技公司 广州梦谷互联网科技有限公司领导 艺电能源互联网科技有限公司招聘 互联网金融运营模式中的金融科技 科技互联网经济论坛 绵阳真晨互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技公司排名 广东猪兼强互联网科技有限公司 互联网科技工作委员会毛军 喔噻互联网科技 极限挑战互联网科技 互联网科技股有哪些 恒生科技互联网指数分析 以后互联网后是啥科技 下一代互联网重大应用科技园 广州全民伙伴互联网科技有限公司
    0