《CSDN搜帖引擎设计》
一、总体思路:
通过对发帖、结帖以及搜帖流程的改进,建立帖子与搜索关键字之间的关联,大幅提高利用关键词搜索帖子的速度和性能。
二、具体流程:
1、发帖:
从关键词列表中选择一个或多个关键词或者自己输入关键词。用户输入的关键词将被记入关键词列表。如果关键词列表很长的话,也可以先用模糊查找的方式查询关键词。关键词按照被查询到的次数排序,被查次数最多的列在前面。可以考虑用Applet的后台线程装载关键字列表,以免关键字列表过长,影响界面响应。关键词也可按照板块组织,各个板块拥有各自的关键字列表,这样每次列出的关键字数量就会大大减少。
2、回复:
回复者可以给帖子捐赠可用分,供结帖时分配,也可以给帖主捐赠可用分,以奖励其提出的典型问题。
可以可针对帖主的问题回复,也可针对网友的回复进行回复。回复的组织方式为任意级别的树形结构。
3、结帖:
结帖期限为从发帖之日起一个月,或者从第一次回复起一个月。超期未结的帖子自动转为超期状态,可由他人代为结帖。代他人结帖者可以获得10可用分。
帖主结帖时可以根据情况为帖子增加可分配的分数。结帖时可以分配的总分数为:帖主在发帖时所设定的分数 + 回复者捐赠的分数 + 帖主在结帖时增加的分数。
帖主还可以在结帖时根据情况增加帖子的关联关键字。但每个帖子的关联关键字数量不得超过5个。
4、搜索:
用户可以在关键词列表中选择关键词进行搜索,也可以用模糊查找的方式确定要使用的关键词。关键词按照被帖子引用的次数排序,被引用次数最多的列在前面。每次搜索可以使用1~5个关键词。如果关键字列表种没有合适的关键字,搜索者还可以输入自定义的搜索关键词进行搜索。 对于用户输入的自定义关键词,采用字符串匹配的方式针对帖子标题和帖主问题进行搜索。用户输入的关键词将被加入关键词列表。
提供搜索结果批量保存的功能,可以将搜索结果批量保存于本地,便于随时查找。
按照帖子被阅读的次数,给结帖人加分(帖主或代帖主结帖的人),每100次加1可用分。
数据库结构示例:
关键字 <PK>
帖子ID列表 数组
被搜索次数
被引用次数
三、其他建议:
1、 关于界面:
帖子浏览界面:提供多种帖子浏览界面供用户选择,并可设置为用户的默认浏览方式。帖子的组织形式为任意级别的树形结构,可以针对帖主的问题进行回复,也可以针对前面的回复进行回复。可以按照树形列表的方式察看帖子,也可以按照时间顺序列表的方式察看帖子。如果是按照时间顺序列表的方式察看帖子,就在回复部分增加指向父一级回复的超级链接,使浏览者可以顺利地找到上一级回复。可以设定每页显示的回复数量为20、50、全部。
结帖界面:树形组织结构。每条回复只占一行。回复前面是给分框。鼠标悬停在某一条回复上时,在鼠标下面显示相应的回复内容(用层实现),且给分框获得输入焦点。这样结帖者只需一只手移动鼠标,一只手按动数字键即可迅速结帖。
搜索结果列表:每帖占一行。每行前面一个CheckBox。鼠标悬停在某一行时,在鼠标下显示帖主的问题(用层实现)。用户可以批量保存CheckBox被选中的帖子。
2、关于帖子存储:
由于帖子数量巨大,给存储和查询带来巨大困难,可以考虑对帖子内容进行分割精简,用数据的冗余换来性能的提升。
1)在关键字与帖子的关联列表中存储帖子标题和帖主的提问问题,这样在列举搜索结果或针对用户自定义的关键词进行搜索的时候就不需要读取全部的帖子内容了。这里的读取是指数据库的磁盘IO,而不是程序的读取,如果帖子内容是存储在一起的,即使SQL语句只访问其中几列,数据库也得把整行内容读入内存。
2)已结的帖子存为两份,一份为精简帖,另一份为原始帖。结帖时,在每一条回复的前面显示一个CheckBox,被结帖人选中的回复就是精简帖的组成部分。只有选中的回复,即精简帖的组成部分,才能获得帖子分数,但并不是精简帖内所有的回复都要获得分数。此功能可以用如下的界面流程实现:每条回复前面为一个CheckBox和一个给分用的EditBox,EditBox默认为Unable,只有在CheckBox被选中时,EditBox才变为Enable。
精简帖浏览界面上有指向原始帖的超级链接,用户只能通过精简帖上的超级链接访问原始帖。由于大大降低了原始帖被访问的概率,可以考虑将原始帖存储在后台的数据仓库中,用单独的数据库存储。
数据库结构示例:
关键字 <PK>
帖子ID列表 数组
被搜索次数
被引用次数
帖子ID <PK>
标题
帖主问题
帖子ID <PK>
标题
帖主问题
精简帖全文
帖子ID <PK>
标题
帖主问题
原始帖全文
发帖时,分配帖子ID,记录帖子标题,问题,分数等。回复时,改写原始帖中的帖子内容。结帖时,生成精简帖,存储在精简帖列表中,并将原始帖转移至数据仓库中。
3、关于可用分:
新用户注册时,分配少量的可用分。用户每登录一次CSDN,获得1可用分。
有专门的界面列举超期待结帖的帖子列表,用户可以代他人结帖,赚取可用分,分值为10可用分 / 帖。帖子回复者可以向发帖者(帖主)捐献可用分,以资鼓励。
帖子整理者可以依据帖子被阅读的次数获得1可用分 / 100次。为避免结帖者用此方法为自己赚分,可以用Session做限制,即在同一Session中多次浏览某一个帖子只算作浏览一次。
八风不动 2004-07-25