效果图,欢迎测试 http://feed.readself.com/
samhjn 同学在上一篇文章评论中表示 Feed Database 的搜索功能不好使。原因是之前我没有太注重搜索上的优化,所以这个功能的体验很差。例如输入 “xiaoxia” 结果搜出一大堆 “xiaoxiao” 的网站,排名还比我的博客靠前,挺失望的!不过,今天的工作就是把这个功能给完善了!现在已经不是之前那个单纯在MySQL里使用like ‘%keyword%’查找那么简陋了。而且搜索速度也大大提升,不再像之前那样慢。
只要你输入关键字“xiaoxia”进行搜索,绝对不会出现“xiaoxiao”的结果了,因为这是两个不同的名字。
同时,你输入的关键词还会被拆分,例如“吸血鬼小说”会被拆分成“吸血鬼”和“小说”。排序方式为先按匹配词数,再按BR值(被友情链接数量)排序。
提到搜索引擎技术就离不开分词和索引,在分词上,我使用的是 mmseg 的中文分算法和搜狗的词库,分词速度快的惊人。以至于我处理数据的瓶颈在MySQL数据库上。我使用了MySQL的fulltext索引功能,在检索效率上可能没有sphinx那么快,但是对于10万个条目以内的数据库,速度已经足够了。为了达到精确查找的目的,我只对网站链接和标题两个属性进行了索引,fulltext的索引数据占用的空间也不多,才不到10M,挺环保的。
对网站标题进行分词之后,连同需要建立索引的链接,一起搬到了一个叫feed_index的索引表中。
下面是未分词的一段数据:
分词之后的数据:
目前这个分词效果还是挺满意的。另外,在最近看的一本搜索引擎相关的书籍中,提到了一种不依赖于词库的分词方法,能够应付一些新生的词汇,有空研究一下。如果两种方法都结合起来,应该能够达到更好的效果 🙂
夜已深,明天继续研究!
如何确保检测出来的服务器程序是正确的?
有一些人为了避免攻击,会对服务器信息做更改,这样测出来的是 nginx 它本身却很可能是 Apache
这个很难说,得到的服务器版本信息不一定是正确的。有少数可能是伪造的。
其实我也是用来做统计作用,总体上统计数据还是准确的,毕竟伪造服务器信息的人不是大部分。
求搜狗解密算法……
你指的是这个吗?
http://xiaoxia.org/2011/03/10/depressed-research-about-sogou-proxy-server-authentication-protocol/
不是啦……是搜狗词库的解密。
囧。。。我只用了like ‘%word%’…
看完你的分词和索引,甚感强大无比啊。
稍后你再对搜索功能进一步优化,完全就是一个搜索引擎了!
分词和索引都有现成的库,这也已经不算是一种新鲜的技术了。
我只是学习了一下原理,然后直接涌上来。
说到优化,还有很多地方需要优化的,最大的问题就是性能和并发搜索能力。
“稍后你再对搜索功能进一步优化,完全就是一个搜索引擎了!”
然后若干年后就诞生了这么一个产品http://www.google.com/blogsearch
哇!!!
你怎么知道我要做这个的呢???
其实我还想做codesearch,只不过还没开始这样的打算。
再来留个脚印:万分佩服! 强大无比!
强大的虾哥做什么都能做的这么专业。巧妙地思路、优秀的算法,学习之!
站在巨人的肩膀之上做事嘛~!一起学习
如果能给每个网站(或者BR大于几)保存一个截图就更好了
o(∩∩)o…哈哈,这个真的需要一个高配置的机器了。
目前在我的现在用的VPS是跑不起webkit的内核啦!
看得出来,xiaoxia用自己的站作为起点,好想知道从xiaoxia到我的小站经过了哪几站啊~~
你这提议很好啊!于是我真的把路径算了一下:
http://feed.readself.com/path/38f3b45ce3e379bb905ef4daf492f7419d938de9
LV(0) http://xiaoxia.org Xiaoxia[PG]
LV(1) http://www.lijiejie.com 李劼杰的博客
LV(2) http://www.rrgod.com/ Eddy Blog – 关注软件加密解密技术交流和材料科学发展的科技博客
LV(3) http://www.programlife.net/ 程序人生-代码疯子的技术博客-Www.ProgramLife.Net
LV(4) http://shaoyimin.com/ Yimin Shao – 邵逸民
LV(5) http://flashlab.info 饮水·思源 | flash,心情,手机web
采集这些RSS做什么啊?
可以从RSS里面获取到文章呀!
你是当RSS阅读器用么?类似google reader的?
对!最近一直在忙着这个东西。
看了下Header信息,发现又是tornado框架开发的
嗯,用起自己最熟悉的东西,效率总是最高的 🙂
如何查询呢?
可以问下那个不用词库的分词是哪本书么= =
《搜索引擎 – 原理、技术与系统》 李晓明、闫宏飞、王继民 2004 科学出版社
才发连“驴”的功能都添加上了。。。 🙂
强大!
嗯,这个是实时算出来的,之前的版本有bug,现在好了。
之前在limit之前算level,结果搜索结果一大,就悲剧了,现在在limit之后,才算level,速度好起来了。
不错。 不过p是否没判断, http://feed.readself.com/?p=1111111 这样打开好无敌,再加大就报500了。
哇!!!被你发现bug了!!!
不过,个人觉得tornado server应该能克服这种问题。也就是说,你输了一个无限大的地址,服务器会持续给你发送数据。
但是应该不会导致服务器崩溃。因为tornado是单线程异步的。
谢谢,稍候修复这个问题 🙂
刚刚搜索“javascript”,出现了一个错误,500: Internal Server Error
刚刚也发现了这个问题,现在好了。。。是因为burst.net的vps被重启了,服务没有运行。。。
好了,我主要是想通过这个引擎认识一些朋友,交换几个链接,现在好了。呵呵,顺便问一下,你用的VPS怎么样
还好吧。。。我博客的vps已经5个月没有重启过了,还算稳定。过段时间我可能把feed.readself.com的VPS换成xen的。
xiaoxia,这个站点用了什么技术,我是菜鸟,想向高手学习。谢谢!
Hi, 数据是mysql的,网站只有一个页面,是python从数据库读取数据生成的 🙂
谢谢!写爬虫脚本得注意哪些问题?有哪些资料可以参考?
这个我也是第一次写,在积累经验截断。
还没看什么资料,不过我觉得需要掌握一下HTTP协议和HTML。
小虾,你的博客站点支持ipv6啊,发现我用校园网即可访问。
嗯,很早就已经有支持!!!
Pingback引用通告: Thought this was cool: 用MySQL全文索引给FeedDB打造一个搜索引擎 « CWYAlpha
我正纠结着给我网站加搜索功能呢,感觉你的已经好强大了啊。不过http://feed.readself.com/好像不能访问了哦。