1.简单使用
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/868fef26f872c96af9c95f7e99dfab33.png)
- 乐观锁的使用
- 即为了防止修改某条数据前别人已经修改该数据
- 增加字段seq_no,上一次搜索字段信息后,在发送修改请求时,可以带上参数seq_no等于上次看到的值,别人修改后该值会增加,故如果判断已经被修改,则本次修改不成功
2.Elasticsearch 的快速开始
- 简单查询
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eeaf8bbde170599aa6d559e1b62b754d.png)
- 聚合查询+mapping映射
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0cad56932f8bd766ada651e6c2395ab4.png)
- 分词插件处理(自定义分词规则)
3.整合springboot
- 整合细节
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/15fae4cdfcc8b7256f2156f3c8bae29b.png)
- nested举例
- 存入数据user{firest:a,last:b},{first:c,last,d}
- ES扁平化处理 user.first{a,c},user.last{b,d}
- 查询{c,b} 本身结果应为无对象,结果两个都查到(模糊搜索)
- 解决方法:设置type为nested,即嵌入式属性
- 整合整体框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7ff8dd926d2b5fdc8000e927ec1cdc51.png)
- 核心代码
public void up(Long spuId) {
List<SkuInfoEntity> skus = skuInfoService.getSkuBySpuId(spuId);
List<Long> skuIdList = skus.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList());
List<ProductAttrValueEntity> baseAttrs = attrValueService.baseAttrlistforspu(spuId);
List<Long> attrIds = baseAttrs.stream().map(attr -> {
return attr.getAttrId();
}).collect(Collectors.toList());
List<Long> searchAttrIds = attrService.selectSearchAttrIds(attrIds);
Set<Long> idSet = new HashSet<>(searchAttrIds);
List<SkuEsModel.Attrs> attrsList = baseAttrs.stream().filter(item -> {
return idSet.contains(item.getAttrId());
}).map(item -> {
SkuEsModel.Attrs attrs1 = new SkuEsModel.Attrs();
BeanUtils.copyProperties(item, attrs1);
return attrs1;
}).collect(Collectors.toList());
Map<Long, Boolean> stockMap = null;
try {
R r = wareFeignService.getSkusHasStock(skuIdList);
TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {};
stockMap = r.getData(typeReference).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, SkuHasStockVo::getHasStock));
} catch (Exception e) {
log.error("库存服务查询异常,原因:", e);
}
Map<Long, Boolean> finalStockMap = stockMap;
List<SkuEsModel> upProducts = skus.stream().map(sku->{
SkuEsModel esModel = new SkuEsModel();
BeanUtils.copyProperties(sku,esModel);
esModel.setSkuPrice(sku.getPrice());
esModel.setSkuImg(sku.getSkuDefaultImg());
if(finalStockMap == null ){
esModel.setHasStock(true);
}else {
esModel.setHasStock(finalStockMap.get(sku.getSkuId()));
}
esModel.setHotScore(0L);
BrandEntity brand = brandService.getById(esModel.getBrandId());
esModel.setBrandName(brand.getName());
esModel.setBrandImg(brand.getLogo());
CategoryEntity category = categoryService.getById(esModel.getCatalogId());
esModel.setCatalogName(category.getName());
esModel.setAttrs(attrsList);
return esModel;
}).collect(Collectors.toList());
R r = searchFeignService.productStatusUp(upProducts);
if (r.getCode() == 0){
baseMapper.updateSpuStatus(spuId, ProductConstant.StatusEnum.SPU_UP.getCode());
}else {
}
}