Spring boot 整合 Elasticsearch

栏目: Java · 发布时间: 5年前

内容简介:前面学习了 Elasticsearch 的简单基本操作,例如安装,基本的操作命令等,今天就来看看 es 和 Spring boot 的简单整合,实现增删改查的功能。众所周知,Spring boot 支持多种 NoSql 数据库,例如 redis、mongodb,elasticsearch 也是其中的一种。并且实现了 Spring boot 一贯的自动化配置,使用起来也是十分方便的。

1. 概述

前面学习了 Elasticsearch 的简单基本操作,例如安装,基本的操作命令等,今天就来看看 es 和 Spring boot 的简单整合,实现增删改查的功能。众所周知,Spring boot 支持多种 NoSql 数据库,例如 redis 、mongodb,elasticsearch 也是其中的一种。并且实现了 Spring boot 一贯的自动化配置,使用起来也是十分方便的。

2. 新建项目

新建一个 spring boot 项目,在 NoSql 这一栏选中 Elasticsearch 。

Spring boot 整合 Elasticsearch

然后在配置文件中加上 es 的配置:

spring:
  data:
    elasticsearch:
      cluster-nodes: 192.168.66.135:9300
      repositories:
        enabled: true
      cluster-name: elasticsearch

注意这里使用的是集群的 9300 端口,而不是 es 默认的 9200 端口。cluster-name 默认就是 elasticsearch,不写也可以的。

3. 简单操作

项目建好之后,可以来试试简单的操作。只要你使用过 Spring Data Jpa,那么理解起来就非常的容易了,因为用法都是类似的。

1.首先需要新建一个实体类,表示这种实体类的数据,做为 es 的文档存放。

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

@Document(indexName = "product", type = "computer")
public class Product {

    private String id;

    private String name;

    private double price;

    private String brand;

    private String color;

}

@Document 注解上面可以指定 index 以及 type 的名称。

2.然后和使用 Jpa 的程序一样,新建一个 dao 层的接口,继承 ElasticsearchRepository 接口,然后可以在这个接口里面写一些自定义的方法,这里我们实现的是简单的增删改查,自带的会支持,所以就不用重写方法了。

/**
 * @author RoseDuan
 */
public interface ProductRepository extends ElasticsearchRepository<Product, String> {


}

按照逻辑还需要写 service 层,这里为了简单,我们就直接在 dao 层进行测试了。

其中修改和增加的操作类似,只需要把实体类的数据变动一下再存储就行了,只是 id 不变,否则就会新建一条记录。

需要重点关注一下查询的操作,因为 es 支持高效的搜索,所以可以直接利用这个接口实现搜索操作,并且可以分页,排序等。

全部的测试代码如下:

@SpringBootTest
@RunWith(SpringRunner.class)
public class ProductRepositoryTest {

    @Autowired
    private ProductRepository productRepository;

    /**
     * 增加和修改操作
     */
    @Test
    public void testAdd(){
        Product product = Product.builder()
                .id("JX1125630000").name("我的笔记本电脑")
                .price(5996).brand("Mac").color("银色")
                .build();
        productRepository.save(product);
    }
    
    /**
     * 查询操作
     */
    @Test
    public void testDelete(){
        productRepository.deleteById("JX1125630000");
    }

    /**
     * 搜索操作
     */
    @Test
    public void testSearch() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withIndices("product").withTypes("computer")
                .withQuery(QueryBuilders.matchQuery("brand", "惠"))
                .withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC))
                .build();

        Page<Product> result = productRepository.search(searchQuery);
        List<Product> content = result.getContent();
        
        for (Product product : content){
            System.out.println(product.toString());
        }
    }
}

除了使用 Jpa 的接口,还可以 ElasticsearchTemplate 来实现对 es 的操作,只需要注入即可使用。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网页设计创意书(卷2)

网页设计创意书(卷2)

麦克尼尔 / 图灵编辑部 / 人民邮电 / 2012-1 / 49.00元

《网页设计创意书(卷2)》是《网页设计创意书》的卷2,但并非其简单补充,而是作者基于近几年网站发展新趋势的再创作。《网页设计创意书(卷2)》先讲解了如何从他人的优秀设计中寻找灵感,接着阐述了重点、对比、平衡、对齐等网站设计的基本原则,然后将网站按类型、设计元素、风格和主题、结构样式和结构元素分类,并分章介绍了每一类的设计技巧。《网页设计创意书(卷2)》语言简练,结合作者精挑细选的网站实例,通俗易懂......一起来看看 《网页设计创意书(卷2)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器