[全文检索]离开lucene姑娘的日子

说起JAVA的全文检索,最常被提起的应该就是 lucene



但是吧,数据量一大了,建索引额外耗费系统资源。CT目前是建索引的batch和web系统分离的,全站多线程建索引耗费时间在2小时左右。

而且lucene本身自带的StandardAnalyzer对于中文的分词相当弱智(有专门的中文分词器,稍后日志里面会介绍)。

不想花那么多心思在上面怎么办?怎摸办? 其实lucene姑娘并不是唯一的选择。大多数的RDBMS都是自带有全文检索功能的。

不例外,MYSQL里也有原生态的全文检索支持。而且性能还相当不错,对于百万级别以下的系统是绰绰有余的。

最经常被使用的innoDB是不支持全文检索的,我们需要MyISAM引擎



但是,数据库已经是innoDB了怎摸办? 有个办法是另建一张搜索表。

比如,原先的表是 bbs_topics,可以针对需要建立索引的列,另建一张全文索引表:
CREATE TABLE search_bbs_topics (


  `id` INTEGER UNSIGNED NOT NULL,


  `title` TEXT NOT NULL,


  `author` VARCHAR(45) NOT NULL,


  PRIMARY KEY (`id`)


)


ENGINE = MyISAM;





ALTER TABLE search_bbs_topics ADD FULLTEXT INDEX fullTextTitle(`title`);


然后INSERT INTO把相应的数据插入表中。








这样,就可以通过 match(列名) against('*匹配数据*' in boolean mode) 的语法来全文检索了。









对于不是很庞大的数据量,结合庖丁的中文分词,效果还是可以的:




相关搜索:




然后还有一个什么问题捏?主表有插入/更新之后,搜索表的数据怎么办?用 触发器可以同步两张表的数据,具体就不多八卦鸟。


 发布时间:2008-11-07 23:31:43 | 阅读:349 | 评论:0 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值