mysql 全文检索

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个字符,而且中文也要四个汉字。。。。没有详细测试,具体可能没有搞清楚)。

只能想一些其他的办法,来迎合这个限制,这就需要做一个分词工具,通过特殊的符号来填充了。。。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值