通过mysql全文搜索实现中文的相关搜索培训资料.pdfVIP

通过mysql全文搜索实现中文的相关搜索培训资料.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通过 MySQL内置全文检索实现中文的相关检索 关键字: MySQL全文检索 全文索引 中文分词 二元分词 区位码 相似度 注:本文使用的 MySQL版本为: MySQL 4.0.x 在 MySQL4中,是已经开始支持全文检索(索引)的了。但是只是对英文支持全 文检索。 由于英文在书写上的特殊性, 使得分词算法相对中文来说, 简单得多。一般来说, 我们可以通过单词与单词之间的空格,以及标点符号来完成这个分词过程。 但是就中文来说,就没有那么简单。 MySQL无法对中文做出正确的分词,假设有 如下英文句子: Hello world! Hello PHP! 通过上面提及的方法,可以很简单的把这个句子分词为: 1 Hello 2 world 3 PHP 我们再来看看中文的句子: 你好世界,你好 PHP! 按照英文的算法,分词如下: 1 你好世界 2 你好 PHP 显然是不能满足我们的需要的。 所以, 首先我们要做的是, 把中文的句子转变为 MySQL眼中的英文, 以便使得它 能以英文分词算法去对句子进行正确的分词处理。 先将上面中文句子进行标点过滤处理,得到以下句子: 你好世界 你好 PHP 接着再使用中文分词中较简单实现的二元分词算法对句子进行二元分词, 得到以 下句子: 你好 好世 世界 你好 PHP 因为把标点符号替换为空格, 以及 PHP本身为英文字母的关系, 可以不用进行二 元切分,所以得到上面句子。 这个时候, 我们来看看处理过后的句子, 会发现, 就其书写格式上来说, 已经符 合英文的书写格式, 既以空格, 标点来对单词形成自然间隔。 只是上面句子没有 标点,只有空格而已。 到此,我们已经成功的将中文“翻译”为 MySQL能理解的“英文”书写格式。 但是, 问题还没解决, 首先, MySQL中,ft_min_word_len (分词词汇最小长度) 这个参数的默认值为 4 ,也就是 4 个字母以上长度的单词,才会被考虑,小于 4 个的,将会被忽略。 如果不改变这个长度, 按照上面的分词结果, 我们将无法通过 你好, 世界, PHP 等检索到相关的结果,因为分出来的词太短了,不在 MySQL的选择范围内。 我们可以通过修改 ft_min_word_len 的值,将其设置为 2 来解决上面问题, 但是 这样做的话,在检索列表中的原本就为英文的短小词汇,如: PHP,MP3,也会被 划入检索范围内,这样做的结果是,出现很多无意义的相关结果。 请看以下列表: [MP3] the look [MP3] because of you 因为他们都同有 MP3在标题中,所以会出现上述提到的问题。 回到 ft_min_word_len 值的问题, 我们之所以要修改他, 是为了能让 MySQL找到 我们的二元分词, 但是短小的英文又被“无辜”的卷入, 我们目前要解决的问题 就是,如何使得 MySQL能检索到二个字的中文词汇, 又能忽略掉原本的英数?第 一个反应是把中文 MD5,这样以上分词就将转化为以下结果: 你好 好世 世界 你好 PHP = b94ae3c6d892b29cf48d9bea819b27b9 f5625345be46432fb0fd51340fcf6679 9067de5206278a93823f9c5dc2c737fd b94ae3c6d892b29cf48d9bea819b27b9 PHP 这样做,首先是使得中文分词的长度超越了默认的

文档评论(0)

137****6572 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档