第六章课后习题

来源:6-9 【勤于思考,夯实学习成果】搜索推荐v1.0架构习题

weixin_慕丝3528488

2020-01-07

1.可以把关键字和一部分筛选、排序变量参数直接作为path变量,而不是param。

例如url可以写成…/shop/search/[KEYWORD]/[CATEGORY][ORDER]/?longitude=[LONGITUDE]&latitude=[LATITUDE]&tags=[TAGS]
。然后规定:

  • 在search后用"/"分隔开的每个path变量,第一个是keyword;第二个是categoryorder等筛选和排序变量,然后规定每个过滤器/排序规则是一个字母+数字的组合,其中数字是该属性在数据库中的id
  • 比如CATEGORY参数以“c"开头,值有"c01","c02"等。ORDER则以"o"开头。
  • 然后把两个“/”的参数通过字符串拼接传给后端(中间还可以加下划线"_"分割),后端再直接通过字符串分割来对参数一一解析。
  • 这样在后期扩展规则的时候,很多时候就不用去改变controller、service和mapper的函数入参,直接在方法内部加判断即可。
  • 部分无法直接在数据库找对应id的变量,比如经纬度和tags还是以parameter传入。
  1. 可以把计算放在程序的Service层,数据库只做查询。并且order by的算法也可以做成接口,在程序具体的方法中实现,这样也更方便修改排序算法的规则。

  2. “数据库不提供千人千面的排序方式”是指在我们不修改现在数据库结构的情况下吗?这样的话,我觉得可以把用户的性别也加入到排序模型中,比如对于女性用户,“丽人”分类赋予的权重可以比男性用户高一点。就是也得在程序中加入一些处理逻辑。

还是没有工作经验的学生,希望老师能多提些意见,谢谢~

写回答

2回答

lahm

2020-04-22

大佬,受教了,我本来想的是以因为这个系统更注重在搜索业务上,把数据库分布在多个服务器上,做成分布式,减轻但服务器的压力,但是sql的查询复杂度还是太高了,即使做成分布式,用户量一旦增长,也会很快不行。

1
0

龙虾三少

2020-01-07

思考很到位

数据库只提供最基础的select计算查询,千人千面可以往课程后面看推荐模型

0
0

ES7+Spark 构建高匹配度搜索服务+千人千面推荐系统

ElasticSearch实现高相关性搜索,Spark MLlib实现个性化推荐

1384 学习 · 559 问题

查看课程