目录
需求分析
通过Elasticsearch完成商品列表查询和分类、品牌、规格参数的分组聚合统计查询
- 当用户输入关键字搜索后,查询出商品列表后点击右上角筛选按钮,能够展示该关键词下的全部商品分类(京东用的是二级分类,共3级分类)、品牌、和规格参数作为筛选条件。
- 商品分类支持单选、品牌支持多选、规格参数支持多选。
- 每当选中或取消选中筛选条件时,都能够实时更新筛选条件和商品数量,并更新商品列表或点击确定更新。
- 注:这里需要注意的是,各个条件中的列表数据都会随着当前已选中的条件变化而变化,但当前操作的条件栏目(如:分类)中的数据是不变的(这里一般由前端控制),言外之意就是,这里的所有筛选条件都是从所有满足选中条件的商品中聚合出的数据,(例:当选中分类为【手机】时,需要重新调用获取查询条件的接口,这是接口返回的条件数据中分类类目中只有手机的分类,品牌类目里只有商品分类为手机的全部品牌,规格参数也同品牌一样,这样就实现了一个不断下钻聚合的过程)
项目环境
springboot + spring-boot-starter-data-elasticsearch(其中spring boot版本:2.1.6)
elasticsearch(版本:6.8.5)
这里环境搭建就不多赘述了,具体详看源代码
API接口实现
首先我们先实现商品列表的过滤分页查询接口
Spring Data Elasticsearch给我们提供了一系列的聚合查询方法
- 索引创建
@Data @Document(indexName = "test", type = "product") //indexName索引名称 可以理解为数据库名 必须为小写 不然会报org.elasticsearch.indices.InvalidIndexNameException异常 //type类型 可以理解为表名 public class Product { /* * @Name: 商品Id * @Example: 1 * @Description: */ private Long id; /