网站搜索设计之——————关于搜索结果排序的设计
最近在做一个CMS系统的搜索模块,要求对用户帮助比较大的排在前面,在网上搜索了一下,这方面的文章,可是轻量级的设计还是比较少!
废话少说,进入正题!
(以下蓝色标示的数字常量大家可以自己个性化设置!)
一、系统需求:
1、VIP会员按等级排前[绝对]
2、最近发布的靠前[相对]
3、热门的(点击高的)靠前[相对]
4、质量好的靠前[相对]
我大体想法是在每条信息后面附加一个权值(powervalue int)
二、处理过程如下:
文章初始值设置为100
1、发布
检测文章 标题 和内容中是否含有特定的关键字来判断权值
规则:“原创” +10
“字数小于100” -10
“字数大于500” + 10
....
2、访问
每访问一次权值+2
3、搜索
如果搜索某些关键词出现在首页
权值+2
4、评论
每多一个评论,权值+5
三、搜索结果排序
OK,到此,权值的相关处理已经完毕!下面进行最核心的搜索结果排序!
遵循以下原则:
匹配成功关键字数:K个
本信息权值:P
信息已发布天数: D天 (最好在数据库中实现)
那么可以得到排序值
(K*P)/D --偏重匹配型
(K*100 + P)/D --均衡型
然后根据排序值降序排列!
值得注意的是,针对不同等级的VIP会员,各等级会员之间可以使用多次查询 然后 使用 union all连接查询结果!
也可以直接按照等级排序!(这种方式感觉比较野蛮!)
以上是我现在的初步设计,有什么不足的地方欢迎大家拍砖!
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架