elasticsearch查询的简单使用

  1. 引入ES依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
  1. 创建一个类存放es的索引位置:
    例子:
@Document(indexName = "goods_by_580", type = "GoodsInfo580Es")
@Data
public class GoodsInfo580Document extends GoodsInfo580Es {
}

indexName:索引名字(相当于mysql的数据库)

type:文档类型(相当于mysql数据库中的表)

@Data
public class GoodsInfo580Es {

    @Id
    private String id;
    /**
     * CRM中的商品ID
     */
    private String crmGoodsId;
    /**
     * 处方级别(0: 处方药,  1: 甲类otc,  2: 乙类otc )
     */
    private String prescriptionType;
    /**
     * 商品名称
     */
    private String name;
    /**
     * 商品编码
     */
    private String goodsCode;
    /**
     * 条型码2
     */
    private String barCode;
    /**
     * 产品规格2
     */
    private String productSpecification;
    /**
     * 包装单位
     */
    private String unit;
    /**
     * 剂型2
     */
    private String dosageForm;
    /**
     * 生产企业2
     */
    private String manufactor;
    /**
     * 批准文号
     */
    private String licenseNumber;

创建es Repository接口:

@Repository
public interface GoodsInfo580Repository extends ElasticsearchRepository<GoodsInfo580Document,String> {
}

业务查询处理:

public class HealthGoodsInfoService4EsImpl implements HealthGoodsInfoService4Es {

    private final GoodsInfo580Repository goodsInfo580Repository;
    @Override
    public List<HealthGoodsInfo4Es580DTO> goodsList(HealthGoodsInfo4EsQO qo) {
        //获取构造好的查询条件
        NativeSearchQuery build = getSearchQuery(qo).build();
        Page<GoodsInfo580Document> search = goodsInfo580Repository.search(build);
        if(search.getContent().size() == 0){
            log.info("ES没有580商品数据。。");
            return null;
        }
        List<HealthGoodsInfo4Es580DTO> goodsInfo4Es580DTOS = CollectionUtil.copy(search.getContent(), HealthGoodsInfo4Es580DTO.class);
        return goodsInfo4Es580DTOS;
    }

    /**
     * 构建查询条件
     *
     * @param qo
     * @return
     */
    private NativeSearchQueryBuilder getSearchQuery(HealthGoodsInfo4EsQO qo) {
        BoolQueryBuilder bool = new BoolQueryBuilder();
        Pageable pageable = PageRequest.of(0,1);
        if (qo == null) {
            return new NativeSearchQueryBuilder();
        }
        if (Func.isNotEmpty(qo.getBarCode())){
            // 精确查询
            QueryBuilder queryBuilders = QueryBuilders.matchPhrasePrefixQuery("barCode",qo.getBarCode());
            bool.must(queryBuilders);
        }
        if (Func.isNotEmpty(qo.getGoodsCode())){
            // 精确查询
            QueryBuilder queryBuilders = QueryBuilders.matchPhrasePrefixQuery("goodsCode",qo.getGoodsCode());
            bool.must(queryBuilders);
        }
        if (Func.isNotEmpty(qo.getGoodsName())){
            // 模糊查询
            MatchPhraseQueryBuilder matchPhraseQuery = QueryBuilders.matchPhraseQuery("name",qo.getGoodsName());
            // 查询结果分页
            pageable = PageRequest.of(0, 70);
            bool.must(matchPhraseQuery);
        }

        return new NativeSearchQueryBuilder().withPageable(pageable).withQuery(bool);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值