欢迎来到天天文库
浏览记录
ID:53243650
大小:31.45 KB
页数:17页
时间:2020-04-02
《通过MySQL全文搜索实现中文的相关搜索.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、通过MySQL内置全文检索实现中文的相关检索关键字:MySQL全文检索全文索引中文分词二元分词区位码相似度注:本文使用的MySQL版本为:MySQL4.0.x在MySQL4中,是已经开始支持全文检索(索引)的了。但是只是对英文支持全文检索。由于英文在书写上的特殊性,使得分词算法相对中文来说,简单得多。一般来说,我们可以通过单词与单词之间的空格,以及标点符号来完成这个分词过程。但是就中文来说,就没有那么简单。MySQL无法对中文做出正确的分词,假设有如下英文句子:"Helloworld!HelloP
2、HP!"通过上面提及的方法,可以很简单的把这个句子分词为:1Hello2world3PHP我们再来看看中文的句子:"你好世界,你好PHP!"按照英文的算法,分词如下:1你好世界2你好PHP显然是不能满足我们的需要的。所以,首先我们要做的是,把中文的句子转变为MySQL眼中的英文,以便使得它能以英文分词算法去对句子进行正确的分词处理。先将上面中文句子进行标点过滤处理,得到以下句子:你好世界你好PHP接着再使用中文分词中较简单实现的二元分词算法对句子进行二元分词,得到以下句子:你好好世世界你好PHP因
3、为把标点符号替换为空格,以及PHP本身为英文字母的关系,可以不用进行二元切分,所以得到上面句子。这个时候,我们来看看处理过后的句子,会发现,就其书写格式上来说,已经符合英文的书写格式,既以空格,标点来对单词形成自然间隔。只是上面句子没有标点,只有空格而已。到此,我们已经成功的将中文“翻译”为MySQL能理解的“英文”书写格式。但是,问题还没解决,首先,MySQL中,ft_min_word_len(分词词汇最小长度)这个参数的默认值为4,也就是4个字母以上长度的单词,才会被考虑,小于4个的,将会被忽
4、略。如果不改变这个长度,按照上面的分词结果,我们将无法通过你好,世界,PHP等检索到相关的结果,因为分出来的词太短了,不在MySQL的选择范围内。我们可以通过修改ft_min_word_len的值,将其设置为2来解决上面问题,但是这样做的话,在检索列表中的原本就为英文的短小词汇,如:PHP,MP3,也会被划入检索范围内,这样做的结果是,出现很多无意义的相关结果。请看以下列表:[MP3]thelook[MP3]becauseofyou因为他们都同有MP3在标题中,所以会出现上述提到的问题。回到ft_
5、min_word_len值的问题,我们之所以要修改他,是为了能让MySQL找到我们的二元分词,但是短小的英文又被“无辜”的卷入,我们目前要解决的问题就是,如何使得MySQL能检索到二个字的中文词汇,又能忽略掉原本的英数?第一个反应是把中文MD5,这样以上分词就将转化为以下结果:你好好世世界你好PHP=>b94ae3c6d892b29cf48d9bea819b27b9f5625345be46432fb0fd51340fcf66799067de5206278a93823f9c5dc2c737fdb94
6、ae3c6d892b29cf48d9bea819b27b9PHP这样做,首先是使得中文分词的长度超越了默认的2个字,同时消除了中文的歧义性。(MySQL4对中文的处理有问题),搜索“车轮”时候,不再会出现类似“发动机”结果的问题。(车轮的例子只是为了方便理解而做出的假设)通过上面的做法,已经解决了分词最小长度的问题,顺利的把中文词汇长度升级,从而达到把中文词汇划入检索范围,把较短的英数划出检索范围。休息一下,然后发现这个MD5后的字符串是否太长了点……比较占用空间,要不,于是想到区位码,4位数的区
7、位码能表示一个GB汉字,一个词有二个汉字组成,转换为区位码后是8个数字。不但能确定惟一性,也就MD5而已减少了长度。下面是转换后的:你好好世世界你好PHP=>b94ae3c6d892b29cf48d9bea819b27b9f5625345be46432fb0fd51340fcf66799067de5206278a93823f9c5dc2c737fdb94ae3c6d892b29cf48d9bea819b27b9PHP=>36672635263542324232297136672635PHP呵呵,是
8、不是比MD5的小了很多呢?最后我们把相同的词汇留一个,多余的删除。得到366726352635423242322971PHP于是就完成了"你好世界,你好PHP!"到"366726352635423242322971PHP"的转换。通过上面方法结合MySQL全文检索语句,我们可以通过给出一个标题例如:"迈克尔·杰克逊-《危险之旅之布加勒斯特站》"找出类似以下的相关标题迈克尔杰克逊-《迈克尔杰克逊危险布加勒斯特演唱会》MichaelJackson-《迈克尔杰克逊罗马尼亚危险演唱会》迈克
此文档下载收益归作者所有