免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2567 | 回复: 6
打印 上一主题 下一主题

论坛搜索引擎的设计实践 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-06 23:30 |只看该作者 |倒序浏览
俺是搞影视的,php是半桶水,搜索引擎对我来说不免题目太大。这里把我闭门造车的想法抛出来,想看看有什么更好的方法,请大家砸砖。如有雷同,纯属巧合。

原文:
http://blog.chinaunix.net/u/13497/showart.php?id=254425

论坛搜索引擎的设计实践

    我自己写的php树形论坛原先采用了模糊查询,也就是使用mysql的WHERE `subject` LIKE %$keyword% OR `content` LIKE %$keyword%这样的方式查询的,支持多个关键词。这种方式查询彻底、精确,但速度慢,对服务器的资源占用应该是比较高的。
    最近抽时间设计尝试了一个新的搜索模式,主要原理是这样的:

    1.自动学习记忆新词汇
    当用户输入查询词汇关键词后,首先这些词汇存入一个词典表,词汇关键词是唯一不重复的。如下表(此表id字段是不重要的)



    2.普通查询
    普通查询就是开头所述的用mysql的LIKE语句实现的,同时,将结果集的帖子id与关键词的1对1地存入索引表,将来的快速查询就是先查这个索引表。用户使用普通查询越多,索引表越丰富。

    3.快速查询
    索引表字段很简单,就是关键词与帖子id的对应,一个关键词可能有一大批帖子id。假如用户关键词有2个,快速查询的原理就是分别查出这2个关键词所对应的帖子id,并存入数组,将这所获得的数组交集的结果就是符合用户2个关键词的结果集id了。最后,按这些结果集的id查询帖子表,就快速地把查询结果输出了。下表就是索引表,id也是不重要的,重要的是keyword、thread_id(帖子id),这个表中反映了关键词“1394”在210436、 189177、145611、109150、39227这些帖子中都存在。



    4.索引表的自动丰富
    用户发贴后,将用户的发表内容经过词典表的所有词汇的检查,将内容中包含的词汇以及本贴的id存入索引表,就实现了新贴的自动检索。
    现在这个系统初步可以使用,可到我的论坛体验。
    地址: http://www.dvhome.cn/bbs

[ 本帖最后由 qingmedia 于 2007-3-6 23:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-03-07 00:21 |只看该作者
你这样难以处理新增贴子及删除贴子时的索引表更新....

而且这样作效果并不算好

论坛徽章:
0
3 [报告]
发表于 2007-03-07 10:02 |只看该作者
原帖由 hightman 于 2007-3-7 00:21 发表
你这样难以处理新增贴子及删除贴子时的索引表更新....

而且这样作效果并不算好


新增帖子的处理在上面已经说了——用户发贴后,将用户的发表内容经过词典表的所有词汇的检查,将内容中包含的词汇以及本贴的id存入索引表,就实现了新贴的自动检索。

删除贴子时的索引表更新——很容易,就是把索引表中所有等于帖子id的关键词都删掉就行了,一条命令:"delete from 索引表 where thread_id=帖子id"

论坛徽章:
0
4 [报告]
发表于 2007-03-07 10:26 |只看该作者
楼主可以参考一下discuz对于搜索的处理方式。基本上是按照输入的字串和文章id建立对应关系,例如:

PHP->1,2,3,4,5

有别的用户输入PHP来检索的时候,直接返回文章ID为1,2,3,4,5的列表。

[ 本帖最后由 孤月侠 于 2007-3-7 10:28 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-03-07 10:50 |只看该作者
给你点建议把,免得自己乱转。

第一,熟悉数据结构

第二,熟悉全文检索

第三,熟悉分布式系统构建

这三者结合才能正确和有效搭建搜索平台。


你这个有点一厢情愿。。。。可能和你的数据规模有关

论坛徽章:
0
6 [报告]
发表于 2007-03-07 11:40 |只看该作者
直接用词对应id也许很不错。

论坛徽章:
0
7 [报告]
发表于 2007-03-07 15:25 |只看该作者

回复 2楼 hightman 的帖子

马大虾的基于词典库文件的分词系统我整不明白,能不能搞一个基于mysql词典库表的分词方法?效率可能不行,但是否通用些呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP