设为首页 收藏本站
查看: 730|回复: 0

[经验分享] mysql 全文检索

[复制链接]

尚未签到

发表于 2016-9-11 10:27:38 | 显示全部楼层 |阅读模式
  mysql 全文检索,以前用postgresql 对全文检索支持很好,现在用MySQL所以临时看了一下。
  
  参看官方文档
  
  MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。  FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。。。。。。。。。。。
  
  MYSQL不支持InnoDB ,所以只能使用MyISAM类型表,创建完表
  
  sql:
  CREATE TABLE `fti_text` (
  `id` int(11) NOT NULL auto_increment,
  `table_name` varchar(50) default NULL COMMENT '表名',
  `pk` varchar(36) default NULL COMMENT '数据表字段主键',
  `type` varchar(20) default NULL COMMENT '检索类型',
  `company` varchar(36) default NULL COMMENT '公司',
  `content` text COMMENT '索引内容',
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `content` (`content`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='索引';
  
  这样就创建一个索引表
  检索的SQL:
  SELECT * FROM `fti_text`    WHERE MATCH (content) AGAINST ('模拟好呀__');
  
  我在这个表中随便模拟了10000条数据,但是怎么查询页查询不出来,不论查什么也查不出来,哦,忘记做分词处理了,以前用PostgreSQL的时候,他是会根据 空格来进行分词的,不支持中文的 ,所以分词的规则都是需要自己写分词的算法。具体的分词我是采用60万数据的词典,基本可以满足要求,而其可以自定义关键字。具体的分词算法就不多说了。
  
  MySQL也应该有一套规则,看到官方的说明是这样的。
  
  
  
  
  
  
  MySQL FULLTEXT 执行将任何单字字符原形 (字母、数字和下划线部分)的序列视为一个单词。这个序列或许也包含单引号 ('),但在一行中不会超过一个。 这意味着 aaa'bbb 会被视为一个单词,而 aaa''bbb则被视为2个单词。位于单词之前或其后的单引号会被FULLTEXT分析程序去掉; 'aaa'bbb' 会变成   aaa'bbb。
  FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ), 则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开。
  一些词在全文搜索中会被忽略: 

  • 任何过于短的词都会被忽略。 全文搜索所能找到的词的默认最小长度为 4个字符。
  • 停止字中的词会被忽略。禁用词就是一个像“the” 或“some” 这样过于平常而被认为是不具语义的词。存在一个内置的停止字, 但它可以通过用户自定义列表被改写。
   
  这么多要求,最要命的是4个字符这条,怎么会这样啊,我本来要做中英文汉语拼音的SUGGEST检索的,不能所有长度少于4个字符的(这样会增加我的分词的大小,即必须平凑成4个字符,而且中文也要四个汉字。。。。没有详细测试,具体可能没有搞清楚)。
  只能想一些其他的办法,来迎合这个限制,这就需要做一个分词工具,通过特殊的符号来填充了。。。
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-270689-1-1.html 上篇帖子: MySQL入门笔记 下篇帖子: MySQL锁表研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表