锁定老帖子 主题:MySQL数据库中文全文检索解决方案
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-30
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[url] http://www.minioa.net/viewtopic.php?f=18&t=264[/url] Lucene中文检索2[url] http://www.minioa.net/viewtopic.php?f=18&t=266[/url] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-09-30
说是解决方案,根本就没有给出解决方案 。。。。。
|
|
返回顶楼 | |
发表时间:2011-10-01
可能我写的不够详细
|
|
返回顶楼 | |
发表时间:2011-10-19
Lucene做切词,然后去mysql查询?
|
|
返回顶楼 | |
发表时间:2011-10-20
曾经试验过类似的,精确度太低,还是直接分词索引来的好~
最多可以把数据库的id一起缓存了,通过索引再去查询指定的数据 |
|
返回顶楼 | |
发表时间:2011-10-20
对,把切好的词存在字段里,然后将这个字段加fulltext索引,查询时就查这个字段
|
|
返回顶楼 | |
发表时间:2011-10-21
与Lucene索引比起,你存入了mysql,并建了一个Fulltext索引。分词都一样的,一个存文件,一个存库?
|
|
返回顶楼 | |
发表时间:2011-10-22
楼主的意思是建立两个字段...
第一个字段是正文..第二个字段是分好的词 ... 比如 第一个字段 中国人民 第二个字段应该就是 中国 人民 中国人民 ....貌似..有点索引的想法..但是只能用于小型索引吧...数据量大了..就麻烦死了 |
|
返回顶楼 | |
发表时间:2011-10-22
如果现在有近2000万条记录, 两个text字段, 要加full text全文索引,会不会很慢?
|
|
返回顶楼 | |
发表时间:2011-10-24
额·· 貌似就是来打广告的
|
|
返回顶楼 | |