changgou-day06
目标:
- 代码实现过滤查询
- 根据分类查询
- 根据品牌查询
- 根据规格查询
- 根据价格区间
- 根据价格进行排序
- 分组查询
- 分类列表数据展示
- 品牌列表数据展示
- 规格的列表数据展示
- 分页
- 高亮
- _id和id的值不一致。
1 分类列表查询
``` 思路: 根据ES实现一个聚合查询,类似于数据库中的分组查询 数据库:select category_name from tb_sku where name like ‘%华为%’ group by category_name
es中:
查询 分组查询 根据商品分类来进行分组 查询分类的列表
GET /skuinfo/docs/_search { “query”: { “match”: { “name”: “华为” } }, “aggs”: { “abc”: { “terms”: { “field”: “categoryName”, “size”: 10 } } } } 当搜索的时候应该就要实现分类查询 得出列表 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”]}
![image.png](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635737256411-bf339f4e-b3e7-4fdd-9dd7-21dd46b05dae.png#clientId=u436ae458-f0e8-4&from=paste&height=815&id=u58821f4a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=815&originWidth=1653&originalType=binary&ratio=1&size=131157&status=done&style=none&taskId=u3ff561ce-75e4-4857-a142-d223c53b57b&width=1653)<br />![1609204682181.png](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635688084786-239373c8-ecb5-4bb2-9eb0-5dbf891e6340.png#clientId=uae8b3d20-d34c-4&from=drop&id=u6b6f52f5&margin=%5Bobject%20Object%5D&name=1609204682181.png&originHeight=496&originWidth=1321&originalType=binary&ratio=1&size=116036&status=done&style=none&taskId=uc50067e4-37ca-4687-a2c0-41e4a039b25)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635732422832-ec43cc84-56b3-42ee-958e-4c36a77be688.png#clientId=u05d5a8ed-7b78-4&from=paste&height=484&id=u705eeabb&margin=%5Bobject%20Object%5D&name=image.png&originHeight=484&originWidth=1409&originalType=binary&ratio=1&size=518631&status=done&style=none&taskId=u415cce80-7799-4055-b3a2-dfd377b0bfe&width=1409)
<a name="H8b0N"></a>
### 2 品牌的列表查询
思路: 使用ES的分组查询 进行获取品牌的列表数据 请求:/search POST 参数:map={“keywords”:”华为”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”]} 逻辑: 1.添加一个查询条件 分组查询 品牌的分组 2.获取分组的结果 品牌的分组结果
<a name="wZ4nx"></a>
### 3.规格的列表数据展示
思路:
1.先分组查询 获取规格的数据 JSON的字符串列表
2.后台将数据进行解析 成一个Map
![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635682523130-d42227d8-a262-4562-b0dd-2b85704fe2a9.png#id=ZxSm0&originHeight=762&originWidth=1802&originalType=binary&ratio=1&status=done&style=none)<br />代码:解析数据<br />![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635682523244-e1c4f816-64b4-4d98-9f0a-f47da8854d32.png#id=ubQ1p&originHeight=494&originWidth=1285&originalType=binary&ratio=1&status=done&style=none)<br />![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635682523326-69f7ddab-6287-43ff-b8c4-ab35a0bd19de.png#id=kSJxe&originHeight=730&originWidth=1801&originalType=binary&ratio=1&status=done&style=none)
带keyword 不分词 不带keyword 分词的
![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635682523429-33e228b5-e35c-4806-8916-a894d399bfd5.png#id=B0RCz&originHeight=974&originWidth=1301&originalType=binary&ratio=1&status=done&style=none)
<a name="nZ55j"></a>
### 4 过滤查询
<a name="M4b54"></a>
#### 4.1 商品分类过滤查询
思路:商品分类过滤查询 点击商品分类的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}
![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635682523506-33a39f5b-34c8-44ba-8ca3-9ca7de2a95a9.png#id=netFG&originHeight=672&originWidth=1875&originalType=binary&ratio=1&status=done&style=none)
<a name="FPxni"></a>
#### 4.2 品牌过滤查询
点击商品品牌的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}
<a name="WoI6J"></a>
#### 4.3 规格过滤查询
点击商品规格的的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”,”spec_网络制式”:”电信2G”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}
<a name="wx4Gu"></a>
#### 4.4 价格区间查询
点击商品价格区间的时候 发送请求将价格区间作为字符串 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”,”spec_网络制式”:”电信2G”,”price”:”0-500”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}
```basic
GET /skuinfo/docs/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "华为"
}
},
{
"range": {
"price": {
"gte": 10,
"lte": 500
}
}
}
]
}
},
"aggs": {
"abc": {
"terms": {
"field": "categoryName",
"size": 10
}
},
"brandGroup": {
"terms": {
"field": "brandName",
"size": 10
}
},
"guige": {
"terms": {
"field": "spec.keyword",
"size": 10
}
}
}
}
4.5 排序
点击价格up按钮的时候 发送请求将排序的字段和排序的类型 传递给后台
后台接收请求之后,执行过滤查询 返回给前端
请求:/search POST
参数:map={"keywords":"华为","category":"你点击的分类的值","brand":"你点击到的品牌的值","spec_网络制式":"电信2G","price":"0-500","sortField":"price","sortRule":"DESC"}
返回值:map={"rows":[{},{}],total:177,totalPages:78,categoryList:["笔记本","电视"],brandList:["a","b"],"specMap":{}}
5.6 分页
点击页码的时候 将当前页码传递给后台 如果没有值,默认获取第一页的数据
后台接收请求之后,执行过滤查询 返回给前端
请求:/search POST
参数:map={"keywords":"华为","category":"你点击的分类的值","brand":"你点击到的品牌的值","spec_网络制式":"电信2G","price":"0-500","sortField":"price","sortRule":"DESC","pageNum":"1"}
返回值:map={"rows":[{},{}],total:177,totalPages:78,categoryList:["笔记本","电视"],brandList:["a","b"],"specMap":{}}
7 高亮实现
1.设置高亮的字段设置前缀和后缀
2.后台执行查询 获取高亮的数据 将高亮的数据中的name,,,的值替换到原来的content中的POJO中
3.再返回给前端