最近在做一个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连接查询结果!

也可以直接按照等级排序!(这种方式感觉比较野蛮!)

以上是我现在的初步设计,有什么不足的地方欢迎大家拍砖!

作者: 跨越高山 发表于 2011-04-08 15:29 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架