Spring Boot操作Elasticsearch(增删改查,新手必看)
Elasticsearch 作为 Spring Data 中非常重要的组件,自然也是按照 JPA 的规范。下面通过示例逐个演示文档的增加、删除、修改与查询等功能。
因此,ElasticsearchRepository 与之前的 JpaRepository 使用方法类似,只需要简单继承 ElasticsearchRepository 就可以实现对 Elasticsearch 数据的操作。
我们在 IDEA 中查看 ElasticsearchRepository 的类图,可以看到 ElasticsearchRepository 类继承于 PagingAndSortingRepository 类,最后 PagingAndSortingRepository 继承于 CrudRepository,如下图所示。

图 1 ElasticsearchRepository类图关系
通过查看源码可以发现,Spring Data 项目中的成员在最上层有着统一的接口标准,ElasticsearchRepository 的结构关系与 JPA 是一样的。只是在最终的实现层对不同的数据库进行了差异化封装。
上面的示例程序通过 findAll() 方法查询全部的文档数据。同样,我们可以使用 find、By、And、Not 等进行数据查询,示例代码如下:
单击 Run Test 或在方法上右击,选择 Run 'testFindByName',运行单元测试方法,验证索引数据查询,运行结果如下图所示:

、图 2 数据保存的运行结果
通过输出可以发现,Elasticsearch 默认进行的就是模糊查询。

图 3 数据保存的运行结果
通过输出结果发现,该文档数据的书名信息已经被变更。Author 被修改为“明朝-吴承恩”,说明文档数据更新成功。
上面的示例是通过自带的 deleteAll 删除全部数据,也可以根据属性条件来删除某个文档:
通过以上示例发现,使用 Spring Boot 操作 Elasticsearch 非常简单,通过少量代码即可实现日常大部分业务的需求。这正是 Spring Data 的强大之处,不用写任何语句,自动根据方法名或类的信息进行增删改查(CRUD)操作。只要定义一个接口,然后继承 Repository,就能具备各种基本的增删改查功能。
ElasticsearchRepository简介
Spring Boot 提供了 spring-boot-starter-data-elasticsearch 组件来集成 Elasticsearch 服务,通过名字就可以看出,它也是 Spring Data 中的成员。因此,ElasticsearchRepository 与之前的 JpaRepository 使用方法类似,只需要简单继承 ElasticsearchRepository 就可以实现对 Elasticsearch 数据的操作。
我们在 IDEA 中查看 ElasticsearchRepository 的类图,可以看到 ElasticsearchRepository 类继承于 PagingAndSortingRepository 类,最后 PagingAndSortingRepository 继承于 CrudRepository,如下图所示。

图 1 ElasticsearchRepository类图关系
通过查看源码可以发现,Spring Data 项目中的成员在最上层有着统一的接口标准,ElasticsearchRepository 的结构关系与 JPA 是一样的。只是在最终的实现层对不同的数据库进行了差异化封装。
创建文档
创建文档就是插入一条数据到 Elasticsearch,JPA 已经默认实现了很多方法,调用 save() 方法保存数据,测试代码如下:@Test public void testSave() { Book book = new Book(); book.setId(1); book.setBookName("西游记"); book.setAuthor("吴承恩"); repository.save(book); Book newbook=repository.findById(1).orElse(null); System.out.println(newbook); }在上面的示例中,使用 save() 方法保存整个文档对象,这是 Repository 通用的数据保存方法。
查询文档
文档查询比较简单,使用 JPA 的默认查询方法或者自定义简单查询方法等都可以实现。下面我们对之前插入的数据做一个查询:@Test public void testFindAll() { for (Book book : repository.findAll()) { System.out.println(book); } }
上面的示例程序通过 findAll() 方法查询全部的文档数据。同样,我们可以使用 find、By、And、Not 等进行数据查询,示例代码如下:
@Test public void testFindByName() { for (Book book : repository.findByBookName("西")) { System.out.println(book); } }在上面的示例中,在 BookRepository 中增加了 findByBookName() 方法。
单击 Run Test 或在方法上右击,选择 Run 'testFindByName',运行单元测试方法,验证索引数据查询,运行结果如下图所示:

、图 2 数据保存的运行结果
通过输出可以发现,Elasticsearch 默认进行的就是模糊查询。
更新文档
更新文档也是调用 save() 方法对属性进行修改,测试代码如下:@Test public void testUpdate() { Book book= repository.findById(1).orElse(null); System.out.println(book); book.setAuthor("明朝-吴承恩"); repository.save(book); Book newbook=repository.findById(1).orElse(null); System.out.println(newbook); }单击 Run Test 或在方法上右击,选择 Run 'testUpdate',运行测试程序,验证文档数据是否被修改,如下图所示:

图 3 数据保存的运行结果
通过输出结果发现,该文档数据的书名信息已经被变更。Author 被修改为“明朝-吴承恩”,说明文档数据更新成功。
删除文档
@Test public void testDeleteAll() { repository.deleteAll(); Book newbook=repository.findById(1).orElse(null); System.out.println(newbook); }
上面的示例是通过自带的 deleteAll 删除全部数据,也可以根据属性条件来删除某个文档:
@Test public void testDeleteById() { repository.deleteByBookName("西"); }参考上面的示例,可以使用 delete、By、And、Not 等关键字进行条件删除。
通过以上示例发现,使用 Spring Boot 操作 Elasticsearch 非常简单,通过少量代码即可实现日常大部分业务的需求。这正是 Spring Data 的强大之处,不用写任何语句,自动根据方法名或类的信息进行增删改查(CRUD)操作。只要定义一个接口,然后继承 Repository,就能具备各种基本的增删改查功能。