原文链接: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. 记Android R(SDK=30)系统执行UiAutomator1.0异常

    最近Android发布了AndroidStudio 3.6稳定版,升级后明显能体验到好多细节的提升,最大的提升莫过于可以创建Android R预览版的模拟器了,并且模拟器可以设置多个尺寸的屏幕.And ...

  2. 【Python】2.14&2.15学习笔记 运算符与表达式

    太爽了,今天可以尽情熬夜了,明天不上课,可以学一整天\(Python\) 运算符 \(+,-,*,%\)就不说了,说几个和\(c\)不太一样的 除法 print( 5/3 ) 输出了\(1.66666 ...

  3. go源码分析(五) 获取函数名和调用者的函数名

    参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string {     ...

  4. 通过shell脚本排查jar包中类冲突

    当我们在线上运行项目时,依赖很多jar包,有时候某个类的全限定名,在多个包中出现,而某个包中的类的方法没有,而且在类加载时,刚好加载了这个类,可能会报找不到方法,或者找不到类的异常,这种情况就可能是类 ...

  5. Java基础 - 原码、反码、补码

    目录 机器数 真值 原码 反码 补码 为什么使用原码. 反码. 补码 机器数 所有数字在计算机底层都是以二进制形式存在的.它的表现形式叫做机器数,这个数有正负之分,最高位为符号位.0 表示正数, 1 ...

  6. Nginx双机主备(Keepalived实现)

    前言 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的 ...

  7. linux-manjaro下添加Yahei Hybrid Consola字体

    1.下载地址 http://www.win10zhijia.net/soft/20160921/3217.html 2.解压 unzip xxx 3.安装 sudo mkdir /usr/share/ ...

  8. OpenCV-Python 傅里叶变换 | 三十

    目标 在本节中,我们将学习 使用OpenCV查找图像的傅立叶变换 利用Numpy中可用的FFT函数 傅立叶变换的某些应用程序 我们将看到以下函数:cv.dft(),cv.idft()等 理论 傅立叶变 ...

  9. 干货 | Python进阶之学习笔记(一)

    认识Python Python应用场景 Python基础语法 一.认识Python Python 是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell) ...

  10. Swagger2 初始用

    1.结合Spring-Boot 引入 pom 依赖  <dependency> <groupId>io.springfox</groupId> <artifa ...