spring-boot集成es,纯代码,粘贴可用

 pom:


<properties>
     <spring-data-elasticsearch.version>4.2.11</spring-data-elasticsearch.version>
</properties>
<dependency>
     <groupId>org.springframework.data</groupId>
     <artifactId>spring-data-elasticsearch</artifactId>
     <version>${spring-data-elasticsearch.version}</version>
 </dependency>

 yml:

spring:
 elasticsearch:
    rest:
      uris: 192.168.0.***:9200
      username:
      password:

dto :

package com.shenmo.ebs.oms.productItem.pojo.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * es的商品信息
 * @author yanggs
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "item_info_search")
public class ItemInfoSearchDto {

    /**
     * 商品ID
     */
    @Id
    private String itemId;

    /**
     * 商品类型[1:单品;2:组合商品;3:商品套装;4:商品打包;5:单品;]1单品是使用属性选择,5单品是没有属性只要sku商品
     */
    private Integer itemType;

    /**
     * 商品名称
     */
    @Field(type= FieldType.Text)
    private String title;

    /**
     * 商品副标题
     */
    private String subTitle;

    /**
     * 发布时间
     */
    @JsonFormat(shape =JsonFormat.Shape.STRING,pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @Field(type = FieldType.Date, format = DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime publishTime;


    /**
     * 市场价
     */
    private BigDecimal marketPrice;

    /**
     * 图片文件ID,多个文件英文逗号隔开
     */
    private String imageId;

    /**
     * 视频文件ID,多个文件英文逗号隔开
     */
    private String videoId;

    /**
     * 是否征订[0:普通;1:征订;]
     */
    private Integer isPreSale;

    /**
     * 是否允许加价[0:不允许;1:允许;]
     */
    private Integer isMarkup;

    /**
     * 商品分类
     */
    private Integer cateId;

    /**
     * 添加时间
     */
    @JsonFormat(shape =JsonFormat.Shape.STRING,pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @Field(type = FieldType.Date, format = DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 商品分类Id集合,后台分类,从顶级到该商品,英文逗号分隔
     */
    private String cateIds;

    /**
     * 销售分类Id集合,多个英文逗号分隔
     */
    private String saleCateIds;

    /**
     * 商品归属课程编号
     */
    private String courseCode;

    /**
     * es搜索字段
     */
    @Field(type= FieldType.Text)
    private String skuTitleNames;

    /**
     * sku属性集合
     */
    @Field(type= FieldType.Text)
    private String skuValueNames;

}
Repository(类似mapper.java)
package com.shenmo.ebs.oms.productItem.repository;

import com.shenmo.ebs.oms.productItem.pojo.dto.ItemInfoSearchDto;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

/**
 * <p>
 * ES商品检索信息 服务类
 * </p>
 *
 * @author yanggs
 * @since 2021-08-19
 */
@Component
public interface ItemInfoSearchDtoRepository extends ElasticsearchRepository<ItemInfoSearchDto,String> {

}

ElasticsearchRepository 两个范型,第一个是用到的bean,第二个是bean的id的类型;

保存数据 

itemInfoSearchDtoRepository.saveAll(itemInfoSearchDtoList);

数据查询

package com.shenmo.ebs.app.item.repository;

import com.shenmo.ebs.app.item.pojo.dto.ItemInfoSearchDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * <p>
 * ES商品检索信息 服务类
 * </p>
 *
 * @author yanggs
 * @since 2021-08-19
 */
@Component
public interface ItemInfoSearchDtoRepository extends ElasticsearchRepository<ItemInfoSearchDto,String> {

    /**
     * 检索商品信息
     * @param CourseCodes 盟校加盟课程
     * @param SkuTitleNames 查询条件
     * @param pageable 分页信息
     * @return 商品分页列表
     */
    Page<ItemInfoSearchDto> findByCourseCodeInAndSkuTitleNames(List<String> CourseCodes, String SkuTitleNames, Pageable pageable);

    /**
     * 检索商品信息
     * @param CourseCodes 盟校加盟课程
     * @param SkuTitleNames 查询条件
     * @return 商品列表
     */
    List<ItemInfoSearchDto> findByCourseCodeInAndSkuTitleNames(List<String> CourseCodes, String SkuTitleNames);
}

 

Sort sort;
        switch (itemInfoSearchRo.getSortType()){
            case "2":
                sort = Sort.by("publishTime").descending();
                break;
            case "3":
                sort = Sort.by("marketPrice").ascending();
                break;
            case "4":
                sort = Sort.by("marketPrice").descending();
                break;
            default:
                sort = Sort.by("cateId").descending();
        }
        Pageable pageable = PageRequest.of(itemInfoSearchRo.getPageNum()-1,itemInfoSearchRo.getPageSize(),sort);
        org.springframework.data.domain.Page<ItemInfoSearchDto> page = this.itemInfoSearchDtoRepository.findByCourseCodeInAndSkuTitleNames(courseCodeListR.getData(),searchWord,pageable);

findByCourseCodeInAndSkuTitleNames 是自定义查询方法

查询示例

关键字使用示例等同于的ES查询
AndfindByNameAndPrice{“bool” : {“must” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
OrfindByNameOrPrice{“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
IsfindByName{“bool” : {“must” : {“field” : {“name” : “?”}}}}
NotfindByNameNot{“bool” : {“must_not” : {“field” : {“name” : “?”}}}}
BetweenfindByPriceBetween{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
LessThanEqualfindByPriceLessThan{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
GreaterThanEqualfindByPriceGreaterThan{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
BeforefindByPriceBefore{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
AfterfindByPriceAfter{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
LikefindByNameLike{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
StartingWithfindByNameStartingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
EndingWithfindByNameEndingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “*?”,”analyze_wildcard” : true}}}}}
Contains/ContainingfindByNameContaining{“bool” : {“must” : {“field” : {“name” : {“query” : “?”,”analyze_wildcard” : true}}}}}
InfindByNameIn(Collectionnames){“bool” : {“must” : {“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“name” : “?”}} ]}}}}
NotInfindByNameNotIn(Collectionnames){“bool” : {“must_not” : {“bool” : {“should” : {“field” : {“name” : “?”}}}}}}
TruefindByAvailableTrue{“bool” : {“must” : {“field” : {“available” : true}}}}
FalsefindByAvailableFalse{“bool” : {“must” : {“field” : {“available” : false}}}}
OrderByfindByAvailableTrueOrderByNameDesc{“sort” : [{ “name” : {“order” : “desc”} }],”bool” : {“must” : {“field” : {“available” : true}}}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值