用MySQL全文索引给FeedDB打造一个搜索引擎 - 杂项其他 - python.cn(news, jobs)
用MySQL全文索引给FeedDB打造一个搜索引擎
效果图,欢迎测试 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的索引表中。
下面是未分词的一段数据:
分词之后的数据:
目前这个分词效果还是挺满意的。另外,在最近看的一本搜索引擎相关的书籍中,提到了一种不依赖于词库的分词方法,能够应付一些新生的词汇,有空研究一下。如果两种方法都结合起来,应该能够达到更好的效果
夜已深,明天继续研究!