最近由于项目需要,开始对全文检索做些了解,刚刚开始,由于项目人力的严重不足,我没有太多的时间进行细致的研究,不知道能走到如何的一个深度,走一步,看一步吧。
我用java做的开发,由于数据库表并不多,我没有采用hibernate或者其他的持久层,而是直接使用了jdbc进行数据库操作。数据库使用的是Mysql。
做搜索,第一想到的就是like了,后来发现条件可能比较复杂,效率可能低下,于是准备添加全文检索的搜索模式。
第一类:数据库内嵌全文检索第一种方案:毫无疑问,最为省事的还是数据库直接帮我搞定,我无须安装新的东西,也不用花太多的时间做新的研究。
我用的是Mysql5.1。查官方文档,使用全文检索技术很简单:
把表建成MyIsam的,
然后导入数据,
然后建立fulltext索引,
然后,调整什么最小词长(这个部分我还没做就发现问题了,节约了一部分工作量),
然后写一个select * from tbl where match (col1,col2) against ("关键字1","关键字2")的sql,
于是发现没有任何的返回记录。上网google了一下,才知道mysql不支持中文的全文,在Mysql5.1参考手册12.7.4中有这么一段话:
诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。其隐含操作及该问题的一些工作区在12.7节,“全文搜索功能”有详细论述。
但我没有找到任何关于这个部分的描述,所以我暂时认为Mysql直到现在对中文的全文检索依然没有支持。
第二种方案:修改版的mysql,因为mysql是开源的软件,那么mysql本身不支持,有没有中文版的能支持呢,在google中顺手搜到了一个,海量公司研发了一个,网址:http://www.hylanda.com/,由于不是开源的,公司是商业化运作,加上网上应用的人好像也不多,故而这个方案也被搁置了。
第三种方案:插件,网上能够google到的就是这样一个:http://myft.twomice.net/,目前好像是开源运作,我还没有尝试,粗略看了一下,怎么还要自己编译mysql,好像和插件的概念有些出入,不过总的来说,这个方式还是值得尝试的。
第四种方案:更换数据库,目前还有oracle,ms-sql可以选择,这两个的中文搜索不知道做的如何,如果不错的,而mysql又不能解决的话,就换数据库吧,我想用oracle应该好一些。
第二类:开源全文检索引擎
目前最火的就是lucene吧,可以研究研究。
在搜索中发现了这样一篇博客文章,加上,以备查。
http://blog.csdn.net/jeafyezheng/archive/2006/09/29/1306463.aspx