引入依赖:
=====
org.springframework.boot
spring-boot-starter-data-elasticsearch
控制层:
====
@Autowired
private EsProductService esProductService;
@ApiOperation(value = “简单搜索:根据关键字,品牌名称或者产品名称,产品编号,副标题搜索(字符串:Text类型最大拆分)”)
@RequestMapping(value = “/search/keyword”, method = RequestMethod.GET)
@ResponseBody
public CommonResult<CommonPage> searchKeyword(@RequestParam(required = false) String keyword,
@RequestParam(required = false, defaultValue = “0”) Integer pageNum,
@RequestParam(required = false, defaultValue = “5”) Integer pageSize) {
Page esProductPage = esProductService.searchKeyword(keyword, pageNum, pageSize);
return CommonResult.success(CommonPage.restPage(esProductPage));
}
@ApiOperation(value = “删除索引库”)
@ApiImplicitParam(name = “indexName”, value = “索引库名称”,
defaultValue = “product”, paramType = “query”, dataType = “String”)
@RequestMapping(value = “/deleteAll”, method = RequestMethod.GET)
@ResponseBody
public CommonResult deleteAll(String indexName) {
int i = esProductService.deleteAll(indexName);
return CommonResult.success(i);
}
@ApiOperation(value = “导入所有产品信息数据库中商品到ES”)
@RequestMapping(value = “/importAll”, method = RequestMethod.GET)
@ResponseBody
public CommonResult importAllList() {
int count = esProductService.importAll();
return CommonResult.success(count);
}
service接口:
==========
public interface EsProductService {
/**
- 从数据库中导入所有商品到ES
*/
int importAll();
/**
-
根据关键字,品牌名称或者产品名称搜索(字符串:Text类型最大拆分)
-
@param keyword
-
@param pageNum
-
@param pageSize
-
@return
*/
Page searchKeyword(String keyword, Integer pageNum, Integer pageSize);
/**
-
删除索引库
-
@return
*/
int deleteAll(String indexName);
}
业务实现类:
======
@Service
public class EsProductServiceImpl implements EsProductService {
private static final Logger LOGGER = LoggerFactory.getLogger(EsProductServiceImpl.class);
@Autowired
private EsProductDao productDao;
@Autowired
private EsProductRepository productRepository;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Override
public int importAll() {
List esProductList = productDao.getAllEsProductList(null);
Iterable esProductIterable = productRepository.saveAll(esProductList);
Iterator iterator = esProductIterable.iterator();
int result = 0;
while (iterator.hasNext()) {
result++;
iterator.next();
}
return result;
}
/**
-
根据关键字,品牌名称或者产品名称,产品编号搜索(字符串:Text类型最大拆分)
-
@param keyword
-
@param pageNum
-
@param pageSize
-
@return
*/
@Override
public Page searchKeyword(String keyword, Integer pageNum, Integer pageSize) {
Pageable pageable = PageRequest.of(pageNum, pageSize);
return productRepository.findByKeywordsOrProductNameOrBrandNameOrProductSnOrSubTitle(keyword,keyword,keyword,keyword,keyword,pageable);
}
/**
-
删除索引库
-
@return
*/
@Override
public int deleteAll(String indexName) {
boolean product = elasticsearchTemplate.deleteIndex(indexName);
if(product){
return 1;
}
return 0;
}
}
EsProductDao接口
==============
public interface EsProductDao {
List getAllEsProductList(@Param(“id”) Long id);
}
EsProductDao.xml
================
<?xml version="1.0" encoding="UTF-8"?>SELECT
p.id productId,
p.product_sn productSn,
p.brand_id brandId,
p.brand_name brandName,
p.product_category_id productCategoryId,
p.name productName,
p.sale sale,
p.sub_title subTitle,
p.price price,
p.keywords keywords,
pav.id pavProductAttributeValueId,
pav.value
pavProductAttributeValue,
pa.id paProductAttributeId,
pa.name
paProductAttributeName,
pc.id pcProductCategoryId,
pc.name
pcProductCategoryName
FROM pms_product p
LEFT JOIN pms_product_attribute_value pav ON p.id = pav.product_id
LEFT JOIN pms_product_attribute pa ON pav.product_attribute_id= pa.id
LEFT JOIN pms_product_category pc ON p.product_category_id
= pc.id
WHERE delete_status = 0 AND publish_sta
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
tus = 1
and p.id=#{id}
EsProductRepository接口
=====================
public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
/**
-
根据关键字,产品名称,品牌名称,产品编号搜索
-
@param keywords
-
@param productName
-
@param brandName
-
@param page
-
@return
*/
Page findByKeywordsOrProductNameOrBrandNameOrProductSnOrSubTitle(String keywords,String productName,String brandName,String productSn,String subTitle,Pageable page);