[全文索引]MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持。

jackxiang 2014-6-8 09:16 | |
背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.19 了,所以,一些小的应用可以用它做全文搜索了,像sphinx和Lucene这样偏重的、需要配置或开发的,节省了成本。

这儿有一个原创的Mysql全文搜索的文章, mysql的全文搜索功能:
http://blog.csdn.net/bravekingzhang/article/details/6727541

基于mysql全文索引的深入理解:
http://www.jb51.net/article/37738.htm

为什么要设置 Mysql 的 ft_min_word_len=1:
http://blog.csdn.net/shilian_h/article/details/6215537


MySQL 全文搜索支持简述:
从MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索,在一般的小网站或者blog上可以使用这个特性支持搜索。
那么怎么使用了,简单看看:
1.创建一个表,指定支持fulltext的列
  CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
  );
2.插入一些数据作为测试
  INSERT INTO articles (title,body) VALUES
    ('MySQL Tutorial','DBMS stands for DataBase ...'),
    ('How To Use MySQL Well','After you went through a ...'),
    ('Optimizing MySQL','In this tutorial we will show ...'),
    ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    ('MySQL vs. YourSQL','In the following database comparison ...'),
    ('MySQL Security','When configured properly, MySQL ...');
3.select查询fulltext的列
  SELECT * FROM articles
    WHERE MATCH (title,body) AGAINST ('database');
查询结果:
  5        MySQL vs. YourSQL        In the following database comparison ...    
  1        MySQL Tutorial               DBMS stands for DataBase ...  
全文查询中的boolean语句, + -跟普通的搜索引擎语法一样
  SELECT * FROM articles WHERE MATCH (title,body)
     AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
innodb不支持fulltext,当然可以使用http://sphinxsearch.com/ sphinx来dump数据库数据支持全文搜索。
原文地址:http://www.javaarch.net/jiagoushi/700.htm

后记,MySQL 5.6.4里才添加了InnoDB引擎的Full-Text索引支持,或用张宴兄弟的基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计: http://blog.s135.com/post/360/
Q:
我想在查询时使用MATCH(...) AGAINST(...)语法,但是我的数据表引擎是Innodb,当我CREATE FULLTEXT INDEX的时候,返回提示The used table type doesn't support FULLTEXT indexes。
我想问的是在innodb引擎中是否不能使用FULLTEXT引擎?有什么替代品吗?可以使用MATCH(...) AGAINST(...)语法吗?
A:
MySQL 5.6.4里才添加了InnoDB引擎的Full-Text索引支持。
不能升级MySQL版本的话:
推荐用Lucene(ElasticSearch比较容易部署)或Sphinx这样的第三方解决方案。
innodb 不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
sphinx 是一个开源软件,提供多种语言的API接口,可以优化mysql的各种查询。
如果这个表更新不频繁,查询量不大,又赶时间,可以用触发器、定时任务或者其他类似的DBA技巧创建支持全文索引的镜像表(如MyISAM类型的),代码改动会小一些。
MySQL5.6 InnoDB FULLTEXTIndexes研究测试:
http://blog.csdn.net/zyz511919766/article/details/12780173

mysql 5.6.4支持nosql:
在最新的 mysql-5.6.4-labs-innodb-memcached 中,实现了简单的给予 key/value的nosql功能,其主要原理
就是mysqld除了监听3306端口之外,同时监听11211端口。使mysqld和memcached服务处在同一进程中。通过
数据库、表与字段的映射,将缓存在memcache的数据插入到映射的表中。安装包中提供了三张表:containers
cache_policies和config_options,表containers就提供了映射关系,表cache_policies提供了三种存储方式(
innodb_only数据只插入表,cache_only只缓存数据,caching即缓存数据又插入表),表config_options中提供
了一个默认分隔符“|”,就是说如果在表containers的values字段中定义了col1,col2...字段,那在设置缓存值时就
可以用val1|val2的形式,这样将会把val1插入到col1,val2插入到col2。

来自:http://blog.csdn.net/sunny5211/article/details/7357893






这个不能算是全文搜索, 只是传统的全表搜索。如果使用mysql的全文检查,在200万数据集上,不可能用那么长的时间的。
使用mysql全文检索的方法如下:
1. 配置mysql参数ft_min_word_len=1
在数据表的文本字段中创建fulltext索引。
2.将原始文本进行分词(处理成按空格分隔的字符串),可使用一些开源的分词模块实现。 再导入到mysql数据表中
3. 使用mysq select * from tb1 where title match'词语' 进行检索。
来自:http://www.oschina.net/question/123890_133459

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7253/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-6-18 10:01
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]