spring boot 集成 elasticsearch cr(u)d 、分页聚合查询

1 添加maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

2. 在yml文件中增加配置

spring:
  elasticsearch: #springboot 默认配置, localhost:9200
      rest:
        uris: ["192.168.99.100:9200"]
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 192.168.99.100:9300
      repositories:
        enabled: true

3. spring elasticsearch具体使用

主要分为一下几个步骤

  • 1 了解es(elasticsearch简称es)基本概念

  • 2 编写document对象,@Field的Field说明

  • 3 基于spring ElasticsearchRepository基本的crud

  • 4 带多条件的聚合匹配的分页查询

  • 1 了解es基本概念

es存储数据有索引index,类型type,主键id三个很关键的概念信息。es是一个搜索引擎,也需要进行数据的存储。通过web工具看,es存储的数据类似于文档,可以通过index与type确定一个具体的文档信息。与数据库mysql类比推理起来的理解很容易。


elasticsearchmysql
indexdatabase(数据库)
typetable(表)
idid(主键)
  • 2 编写document对象

document对象对应的就是es中的文档。

例如:

@Data
@Document(indexName = "pms", type = "product",shards = 1,replicas = 0)
public class EsProduct implements Serializable {
    private static final long serialVersionUID = -1L;
    @Id
    private Long id;
    @Field(type = FieldType.Keyword)
    private String productSn;
    private Long brandId;
    @Field(type = FieldType.Keyword)
    private String brandName;
    private Long productCategoryId;
    @Field(type = FieldType.Keyword)
    private String productCategoryName;
    private String pic;
    @Field(analyzer = "ik_max_word",type = FieldType.Text)
    private String name;
    @Field(analyzer = "ik_max_word",type = FieldType.Text)
    private String subTitle;
    @Field(analyzer = "ik_max_word",type = FieldType.Text)
    private String keywords;
    private BigDecimal price;
}

FieldType 核心的几个简要说明,具体参照官网

Core datatypes
string
    text and keyword
Numeric
    long, integer, short, byte, double, float, half_float, scaled_float
Date
    date
Date nanoseconds
    date_nanos
Boolean
    boolean
Binary
    binary
Range
    integer_range, float_range, long_range, double_range, date_range, ip_range
  • 3 基于spring ElasticsearchRepository基本的crud

es的dao层继承ElasticsearchRepository接口,即可调用其中spring包装好的各种方法,以及支持CrudRepository,以及可以通过findby字段进行查询(都不用写sql),类似于jpa,也支持分页。

例如:

public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
    /**
     * 搜索查询
     *
     * @param name              商品名称
     * @param subTitle          商品标题
     * @param keywords          商品关键字
     * @param page              分页信息
     * @return
     */
    Page<EsProduct> findByNameOrSubTitleOrKeywords(String name, String subTitle, String keywords, Pageable page);

}

该接口具有很多crud方法(es不存在修改一说,保存时直接覆盖)。

ElasticsearchRepositoryj接口继承了CrudRepository接口,所以它也有crud的方法。

public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    Optional<T> findById(ID var1);

    boolean existsById(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterable<? extends T> var1);

    void deleteAll();
}
  • 4 带多条件的聚合匹配的分页查询

在dao层接口中添加该方法即可。Page为spring自带的page对象,后期可以自己进行组装。

   /**
     * 搜索查询
     *
     * @param name              商品名称
     * @param subTitle          商品标题
     * @param keywords          商品关键字
     * @param page              分页信息
     * @return
     */
    Page<EsProduct> findByNameOrSubTitleOrKeywords(String name, String subTitle, String keywords, Pageable page);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值