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:[“笔记本”,”电视”]}

  1. ![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)
  2. <a name="H8b0N"></a>
  3. ### 2 品牌的列表查询

思路: 使用ES的分组查询 进行获取品牌的列表数据 请求:/search POST 参数:map={“keywords”:”华为”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”]} 逻辑: 1.添加一个查询条件 分组查询 品牌的分组 2.获取分组的结果 品牌的分组结果

  1. <a name="wZ4nx"></a>
  2. ### 3.规格的列表数据展示
  3. 思路:

1.先分组查询 获取规格的数据 JSON的字符串列表 2.后台将数据进行解析 成一个Map> 返回给前端 3.前端循环遍历即可 请求:/search POST 参数:map={“keywords”:”华为”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}

  1. ![](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 分词的

  1. ![](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)
  2. <a name="nZ55j"></a>
  3. ### 4 过滤查询
  4. <a name="M4b54"></a>
  5. #### 4.1 商品分类过滤查询

思路:商品分类过滤查询 点击商品分类的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}

  1. ![](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)
  2. <a name="FPxni"></a>
  3. #### 4.2 品牌过滤查询

点击商品品牌的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}

  1. <a name="WoI6J"></a>
  2. #### 4.3 规格过滤查询

点击商品规格的的时候 发送请求 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”,”spec_网络制式”:”电信2G”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}

  1. <a name="wx4Gu"></a>
  2. #### 4.4 价格区间查询

点击商品价格区间的时候 发送请求将价格区间作为字符串 传递给后台 后台接收请求之后,执行过滤查询 返回给前端 请求:/search POST 参数:map={“keywords”:”华为”,”category”:”你点击的分类的值”,”brand”:”你点击到的品牌的值”,”spec_网络制式”:”电信2G”,”price”:”0-500”} 返回值:map={“rows”:[{},{}],total:177,totalPages:78,categoryList:[“笔记本”,”电视”],brandList:[“a”,”b”],”specMap”:{}}

  1. ```basic
  2. GET /skuinfo/docs/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "must": [
  7. {
  8. "match": {
  9. "name": "华为"
  10. }
  11. },
  12. {
  13. "range": {
  14. "price": {
  15. "gte": 10,
  16. "lte": 500
  17. }
  18. }
  19. }
  20. ]
  21. }
  22. },
  23. "aggs": {
  24. "abc": {
  25. "terms": {
  26. "field": "categoryName",
  27. "size": 10
  28. }
  29. },
  30. "brandGroup": {
  31. "terms": {
  32. "field": "brandName",
  33. "size": 10
  34. }
  35. },
  36. "guige": {
  37. "terms": {
  38. "field": "spec.keyword",
  39. "size": 10
  40. }
  41. }
  42. }
  43. }

4.5 排序

  1. 点击价格up按钮的时候 发送请求将排序的字段和排序的类型 传递给后台
  2. 后台接收请求之后,执行过滤查询 返回给前端
  3. 请求:/search POST
  4. 参数:map={"keywords":"华为","category":"你点击的分类的值","brand":"你点击到的品牌的值","spec_网络制式":"电信2G","price":"0-500","sortField":"price","sortRule":"DESC"}
  5. 返回值:map={"rows":[{},{}],total:177,totalPages:78,categoryList:["笔记本","电视"],brandList:["a","b"],"specMap":{}}

5.6 分页

  1. 点击页码的时候 将当前页码传递给后台 如果没有值,默认获取第一页的数据
  2. 后台接收请求之后,执行过滤查询 返回给前端
  3. 请求:/search POST
  4. 参数:map={"keywords":"华为","category":"你点击的分类的值","brand":"你点击到的品牌的值","spec_网络制式":"电信2G","price":"0-500","sortField":"price","sortRule":"DESC","pageNum":"1"}
  5. 返回值:map={"rows":[{},{}],total:177,totalPages:78,categoryList:["笔记本","电视"],brandList:["a","b"],"specMap":{}}

7 高亮实现

  1. 1.设置高亮的字段设置前缀和后缀
  2. 2.后台执行查询 获取高亮的数据 将高亮的数据中的name,,,的值替换到原来的content中的POJO
  3. 3.再返回给前端

changgou-day06 - 图1
高亮的代码:
changgou-day06 - 图2
changgou-day06 - 图3
获取高亮数据代码:
changgou-day06 - 图4

8 丢失精度 参考讲义