MySQL数据库中文全文检索解决方案
2011-09-29 21:03
267 查看
在MySQL建立英文的全文索引不是难事,但是要做好中文的全文索引需要做很多工作。
MySQL默认不支持中文索引,因为中文不能像英文那样通过空格来准确的判断单词,而需要通过语义来判断,这就需要中文切词工具支持,由于版权问题,MySQL一直没有提供中文支持,虽然MySQL发展的很快。
那么我们只能曲线救国了。
场景模拟,在OA系统中添加对新闻的全文搜索支持。
技术实现,对新闻表的标题和正文字段建立Fulltext索引,然后通过MATCH的方式检索。
虽然我们可以通过like或regexp的方式检索,但是和MATCH相比,前者的效率要远远低于后者,前者需要1秒钟,通过全文索引匹配的后者可能只需要0.002秒钟,这就是效率。
SELECT count(*) FROM t where body like'%开源%'
SELECT count(*) FROM t where body regexp'开源'
SELECT count(*) FROM t where body like binary('%开源%')
SELECT body FROM t where match(body) against('开源' in boolean mode)
问题难点,英文容易匹配,以为有空格,但是中文一般是一个个的句子,不好判断。
联想思考,要是将中文能够在词语之间加入空格,那么就可以很容易匹配到。经测试,这种方式是可行的。
现在的问题,变成,如何将一个篇幅的中文汉字提取出有效的关键词,然后各关键词用空格连起来,存入一个字段,然后对这个字段建立Fulltext索引。
思路就是这样的,下面的工作就是如何提取关键词,也就是常说的中文切词或分词。
中文切词方案请参照
Lucene全文检索1 http://www.minioa.net/viewtopic.php?f=18&t=264
Lucene中文检索2 http://www.minioa.net/viewtopic.php?f=18&t=266
MySQL默认不支持中文索引,因为中文不能像英文那样通过空格来准确的判断单词,而需要通过语义来判断,这就需要中文切词工具支持,由于版权问题,MySQL一直没有提供中文支持,虽然MySQL发展的很快。
那么我们只能曲线救国了。
场景模拟,在OA系统中添加对新闻的全文搜索支持。
技术实现,对新闻表的标题和正文字段建立Fulltext索引,然后通过MATCH的方式检索。
虽然我们可以通过like或regexp的方式检索,但是和MATCH相比,前者的效率要远远低于后者,前者需要1秒钟,通过全文索引匹配的后者可能只需要0.002秒钟,这就是效率。
SELECT count(*) FROM t where body like'%开源%'
SELECT count(*) FROM t where body regexp'开源'
SELECT count(*) FROM t where body like binary('%开源%')
SELECT body FROM t where match(body) against('开源' in boolean mode)
问题难点,英文容易匹配,以为有空格,但是中文一般是一个个的句子,不好判断。
联想思考,要是将中文能够在词语之间加入空格,那么就可以很容易匹配到。经测试,这种方式是可行的。
现在的问题,变成,如何将一个篇幅的中文汉字提取出有效的关键词,然后各关键词用空格连起来,存入一个字段,然后对这个字段建立Fulltext索引。
思路就是这样的,下面的工作就是如何提取关键词,也就是常说的中文切词或分词。
中文切词方案请参照
Lucene全文检索1 http://www.minioa.net/viewtopic.php?f=18&t=264
Lucene中文检索2 http://www.minioa.net/viewtopic.php?f=18&t=266
相关文章推荐
- PHP+MySQL数据库之中文全文检索解决方案
- MySQL数据库中文全文检索解决方案
- MYSQL 百万条记录全文检索中文解决方案
- 基于MySQL数据库的UTF8中文网站全文检索的实现
- PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
- MYSQL百万条记录全文检索中文解决方案
- 基于MySQL数据库的UTF8中文网站全文检索的实现
- 基于MySQL数据库的UTF8中文网站全文检索的实现
- MYSQL 百万条记录全文检索中文解决方案
- MYSQL 百万条记录全文检索中文解决方案
- Sphinx在windows下安装使用[支持中文全文检索]
- 全文检索、数据挖掘、推荐引擎系列3---全文内容推荐引擎之中文分词
- mysql数据库的中文乱码问题解决方案
- 全文检索、数据挖掘、推荐引擎系列3---全文内容推荐引擎之中文分词
- 使用SQL SERVER 2000的全文检索功能(支持中文检索)
- 通过MySQL内置全文检索实现中文的相关检索
- 基于Lucene/XML的站内全文检索解决方案
- java(jsp)使用MySql数据库,中文乱码的完整解决方案
- lucene是个全文检索工具 IKAnalyzer是个分词包 可以用来做中文的检索
- 基于postgreSQL9.1的中文全文检索(基于Linux)