自动填充数据有两部需要维护,首先是关键字列表,其次是关键字后补列表。
每当用户查询关键字的时候,首先从关键字列表中进行查找,只要有匹配的就检索出来,其实这里还是需要进行关联度匹配和分析,这个可以留在后面实现。
如果关键字列表中没有完全匹配的,后补的列表中也没有这个关键字,那么就将其放入到关键字后补列表中;如果已经存在,则检索次数中加1;当检索达到了5000次之后,就需要从关键字后补列表中提升到关键字列表中,从其中查找检索次数最小的关键字进行替换。
关键字列表中的关键字是由分值的,每三天,次数将会10,这样一段时间没有被访问的关键的值就会减少,随着时间的推移,那些曾经很多点击率的产品的分值就会越来越低,可以供后来者进行替换。
关键字列表是由上限的,上限定为5000;关键字后补列表上限是20000(两万)。
后来发现这里的思路有偏差:我的这个想法,根据访问量来定keywords应用场景其实是百度,对于查询是不定的,基于用户的输入;但是对于电商网站,他的关键字检索其实是基于产品配置的,也就是在后台产品配置中将会有产品查询关键字这一项,所以其实建议关键字的来源其实是产品配置。
另外,对于排序,我才用的是Redis的有序集合,那么汉字如何来排序呢?我会自己维护一张汉字表,每当增加一个汉字,我都会为这个汉字创建一个整型值,对于汉字组成,比如“我”是8000,“我们”就是8100,“我们的”就是8120;其实关键字的检索汉字并不会过多,预估五万,保证10万个位置即可,那么对于首汉字其实只要保证9000万选,那么二级汉字可以保证900万可选,三级保证90万可选;其实当选择到二级的时候已经把基本全部的项目返回;但是可能会出现二级量也很大,那么就要依赖于三级数量。
总之,基本思路就是将汉字转化为数字进行存储,然后利用Redis的有序集合自动进行排序,然后检索的时候就是把二级或者三级匹配的项目选出来。
如果二级过多,但是用户只是输入了二级,那么只是返回部分数据,一旦发生了输入了三级没有匹配项,再根据三级信息去拉去数据。
自动填充-实现逻辑
最新推荐文章于 2022-08-15 17:35:07 发布