- 引入ES依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- 创建一个类存放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);
}
}