原文链接:http://www.cnblogs.com/robertsun/p/5999588.html

对于一些简单的检索可以通过mysql自带的全文索引及 MATCH AGAINST 查询语句实现。实验步骤如下。
1、建表
DROP table IF exists con_video_file_des_test;
CREATE TABLE `con_video_file_des_test` (
`content_id`  bigint(20) NOT NULL AUTO_INCREMENT COMMENT '视频ID' ,
`video_title`  varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '视频标题' ,
`video_title_phonetic`  text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '视频标题拼音' ,
`video_title_en`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '视频标题英文' ,
PRIMARY KEY (`content_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
COMMENT='con_视频类文件描述信息'
AUTO_INCREMENT=7
ROW_FORMAT=COMPACT;
2、插入测试数据
INSERT INTO `test`.`con_video_file_des_test` (`content_id`, `video_title`, `video_title_phonetic`, `video_title_en`) VALUES ('1', '建国大业', 'jian guo da ye', 'blockbuster Founding of the Republic');
INSERT INTO `test`.`con_video_file_des_test` (`content_id`, `video_title`, `video_title_phonetic`, `video_title_en`) VALUES ('2', '坚果游记', 'jian guo you ji', 'jian guo travel');
3、索引如下
alter table con_video_file_des_test add fulltext search_index(video_title,video_title_phonetic,video_title_en);
4、查询测试
a: select * from con_video_file_des_test where match(video_title,video_title_phonetic,video_title_en) against('建国');
b: select * from con_video_file_des_test where match(video_title,video_title_phonetic,video_title_en) against('建国大业');
c: select * from con_video_file_des_test where match(video_title,video_title_phonetic,video_title_en) against('jian guo');
d: select * from con_video_file_des_test where match(video_title,video_title_phonetic,video_title_en) against('jian guo da ye');
a查询无数据;b查询返回第一条记录,c,d查询都返回两条记录,并第一条记录为坚果游记。
解释如下因为mysql是以空格分割进行分词建立索引的,所以a查询没有查到数据,b查询能查到数据;c,d查询均查询到语句第一条记录为坚果游记是因为MATCH...AGAINST是以相关性排序,由高到低;
其他注意事项:
1、预设搜寻是不分大小写,若要分大小写,columne 的 character set要从utf8改成utf8_bin。
2、预设 MATCH...AGAINST 是以相关性排序,由高到低。
3、MATCH(title, content)里的字段必须和FULLTEXT(title, content)里的字段一模一样。否则提示 Can't find FULLTEXT index matching the column list。
4、ft_min_word_len = 全文检索的最小许可字符(默认4,通过 SHOW VARIABLES LIKE 'ft_min_word_len' 可查看),中文通常是两个字就是一个词。
5、检索方式有自然语言检索(IN NATURAL LANGUAGE MODE)和布尔检索(IN BOOLEAN MODE)两种,两种检索就不深入研究了。
6、由于不能对中文进行单个字词的检索,一解决方法是添加拼音列,存储中文转成的拼音,将输入的中文转为拼音进行检索并返回结果,但这样会出现输入“建国”找到了两条记录“建国大业”、“坚果游记”。
mysql的全文检索可以应对一些简单的应用需求,对于一些要求更高的应用可以通过其他全文检索方式实现,比如Lucene、Nutch、solr等。

mysql全文索引浅谈的更多相关文章

  1. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...

  2. MySQL之浅谈MySQL的存储引擎

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.     我们通常说的MySql数据库,sql server数据库等 ...

  3. 【MySQL】MySQL之浅谈MySQL的存储引擎

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.     我们通常说的MySql数据库,sql server数据库等 ...

  4. 【MySQL】浅谈 varchar(N)

    一  前言  varchar(N) N代表什么意思,能存放多少个中文字符?属于老生常谈的问题了,今天又被一个开发同事问我关于这个问题,索性写一篇文章来具体介绍一下.二 理论知识 先说明一下 MySQL ...

  5. mysql之浅谈主外键

    主键(PRIMARY KEY) 主键在一个数据表中只能有唯一的一个,约束当前字段的值不能重复,且非空保证数据的完整性,也可以当做当前数据表的标识符用来查询(当做索引,唯一性索引的一种) 创建带主键的表 ...

  6. Linux CentOS下MySQL的安装配置之浅谈

    前期必备安装:VMware虚拟机,CentOS镜像[注意:Linux下使用CentOS   MySQL是不用在官网下载的,只需要配置就OK了] 下面开始正式操作: //CentOS安装MySQL之浅谈 ...

  7. 浅谈MySQL存储引擎-InnoDB&MyISAM

    存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...

  8. MySql主从配置实践及其优势浅谈

    MySql主从配置实践及其优势浅谈 1.增加两个MySQL,我将C:\xampp\mysql下的MYSQL复制了一份,放到D:\Mysql2\Mysql5.1 修改my.ini(linux下应该是my ...

  9. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...

随机推荐

  1. js获取按钮的文字

    button按钮有两种情况: 1 <input type="button" id="button" value="button"> ...

  2. 创建Sphinx + GitHub + ReadtheDocs托管文档

    最新博客链接 "Tsanfer's Blog" 创建Sphinx + GitHub + ReadtheDocs托管文档 Readthedocs在线电子书链接

  3. 利用Docker手动构建WebLogic镜像的步骤

    info 我的Docker环境信息如下: [root@localhost ~]# docker info -f " OSType: {{.OperatingSystem}} {{.Archi ...

  4. 【codeforces】Codeforces Round #612 (Div. 2) C. Garland——DP

    题目链接 贪心模拟了半天,最后放弃了 题意 给你一串从1−n1-n1−n的序列,其中部分未知(表示为0),补全序列使得相邻数值奇偶性相反的数量最少 相邻数值的奇偶性相反:两个相邻的两个数值,其中一个为 ...

  5. eclipse-JEE配置Tomcat并发布第一个项目

    一.配置过程 Window--preferences--Server--Runtime Environment, 然后点击add 我下载的是Tomcat7.0,选择你的版本就行了 选择Tomcat的安 ...

  6. 使用Keras进行深度学习:(二)CNN讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 现今最主流的处理图像数据的技术当属深度神经网络了,尤其是卷积神经网 ...

  7. OpenAI的GPT-2:用Python构建世界上最先进的文本生成器的简单指南

    介绍 "The world's best economies are directly linked to a culture of encouragement and positive f ...

  8. TensorFlow报错module 'tensorflow' has no attribute 'xxx'解决办法

    原因:TensorFlow2.0版本修改了许多函数名字 tf.sub()更改为tf.subtract() tf.mul()更改为tf.multiply() tf.types.float32更改为tf. ...

  9. Java内存模型和ConcurrentHashMap 1.7源码分析

    简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体 ...

  10. JavaScipt创建函数的方法

    JavaScipt的函数的定义有三种方式:  一.命名函数定义 1.JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 (). 2.函数名可包含字母.数字.下划线和美 ...