`
gladstone
  • 浏览: 68958 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

[全文检索]离开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 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics