mysql使用全文索引实现大字段的模糊查询
0.场景说明
centos7 mysql5.7 InnoDB引擎
0.1创建表
DROP TABLE IF EXISTS tbl_article_content;
CREATE TABLE tbl_article_content (
id bigint(40) NOT NULL AUTO_INCREMENT,
content text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
article_id bigint(40) NOT NULL COMMENT '对应文章ID',
create_by datetime(0) NOT NULL COMMENT '创建时间',
modifield_by datetime(0) NOT NULL COMMENT '更新时间',
PRIMARY KEY (id) USING BTREE,
INDEX artid(article_id) USING BTREE,
FULLTEXT INDEX content_word(content) WITH PARSER ngram
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
0.2为什么要使用索引
因为有一个全局搜索的的需求,用户输入关键字对博客系统内所有含有该字段的文章(标题&简介&内容)进行展示,(上表只是文章内容表),由于要对文章内容进行搜素,而文章内容content在数据库中是以text存储的,所以为了查询效率,这里就需要使用索引,由于是查大文本,这里选择使用全文索引(fulltext).
1.创建索引(使用ngram解析器)
create fulltext index content_word on tbl_article_content(content) WITH PARSER ngram;
ngram是一个支持中文索引的分词引擎,
在这里我们对tbl_article_content表的content字段建一个叫content_word的全文索引.
2.mysql配置(my.cnf)
mysql默认是没有开启与配置ngram的,所以在建立索引后对mysql进行配置
打开mysql配置文件 vim /etc/my.cnf
在[mysqld]下加入
ft_min_word_len=1 //全文索引的最小搜索长度。默认是4
ngram_token_size=1 //分词的大小设置,这里设置越小,索引越大
重启mysql
systemctl restart mysqld
进入mysql,修复一下之前创的索引
repair table tbl_article_content
3.查询语句
select article_id FROM tbl_article_content WHERE MATCH(content) AGAINST('没有了');
4.总结问题
从MySQL 5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效,使用的时候注意自己版本号和配置
5.相关命令
show create table tbl_article_content; //查询当前表信息
SHOW VARIABLES LIKE '%ngram%'; //查询ngram引擎配置信息
6.欢迎follow
github: https://github.com/DianeDii
wx: dianedii
知乎: 爱睡觉的狄大人 (带你睡大觉)
mysql使用全文索引实现大字段的模糊查询的更多相关文章
- mybatise 实现同一字段多模糊查询
mybatise 同一字段多模糊查询 <foreach collection="typeList" index="index" item="it ...
- django中多个字段的模糊查询
django中多个字段的模糊查询 使用Entity.objects.filter(name_contains='kris').filter(address='beijing') 这个方法是指名字包含k ...
- mysql 单表下的字段操作_查询
查询的规律 查询语句限定条件越多,查询范围越小: 1.整个表 Select * From 库名.表名 2.整个表的某字段内 Select id From 库名.表名 3.整个表某字段的范围内 Sele ...
- MySQL中int类型的字段使用like查询方法
方法参考自: http://stackoverflow.com/questions/8422455/performing-a-like-comparison-on-an-int-field 也就是使用 ...
- Mybatis 一个搜索框对多个字段进行模糊查询
<select id="list" parameterType="ParamConfigCondition" resultType="Param ...
- Oracle Blob 字段的模糊查询
原文地址:http://blog.csdn.net/springk/article/details/6866248
- 怎么对ORACLE里的CLOB字段进行模糊查询
select b.* from oss_service_log a left join oss_service_log_detail b on a.pk_log = b.pk_log where a. ...
- myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法
参考:https://blog.csdn.net/rainbow702/article/details/50519424 like CONCAT('%', #{mkName}, '%')
- MySQL数据库一个字段对应多个值得模糊查询
当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 select * from a where name like 'a%' or name like 'b%' ....or ...; 但是 ...
随机推荐
- Hbase 2.2.2 安装、配置(兼容 Hadoop 3.1.3)
准备 Hbase 2.2.2 安装包 下载链接 链接:https://pan.baidu.com/s/1TqEry-T7sYpq4PdhgLWdcQ 提取码:de5z 安装 上传到虚拟机上,之后解压即 ...
- Linux用户配置文件
一,用户信息文件 /etc/passwd 1,用户管理简介 1,越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范 2,在Linux中主要是通过用户配置文件来查看和修改 ...
- pandas LabelEncoder方法,对离散值进行编码,并储存
# 3.离散值进行LabelEncoder #处理数据的三个步骤,去重,处理缺失值,离散值LabelEncoder from sklearn import preprocessingfrom skle ...
- 你知道Python基本数据类型是哪6个么
Python 是强类型语言,在学习 Python 时,有必要了解 Python 有哪些基本数据类型,一共 6 个:Number(数字).String(字符串).List(列表).Tuple(元组).S ...
- Python(一) 快速配置Python编译环境与第一个py文件程序
1. Python基本语法在此不熬述. 2. 到管网下载Python 3.6.x 版本,与本机匹配的版本,如本机是 win7 64 python-3.6.5-amd64 3. 下载IDE:Python ...
- 笔记-[APIO2010]特别行动队
笔记-[APIO2010]特别行动队 [APIO2010]特别行动队 \(f_i\) 表示将 \((j+1,j+2,\dots,i)\) 分为一组,已解决 \(i\) 之前的士兵的最小代价. \(a& ...
- springcloud gateway解决跨域问题
/** * 跨域允许 */ @Configuration public class CorsConfig { @Bean public WebFilter corsFilter() { return ...
- STL——容器(List)List 的构造函数
list<T> lstT -- list 对象的默认构造 list 与 vector 一样,同样采用模板类实现,对象的默认构造形式:list<T> lstT 如: 1 #in ...
- DVWA各等级文件上传漏洞
file upload 文件上传漏洞,攻击者可以通过上传木马获取服务器的webshell权限. 文件上传漏洞的利用是 够成功上传木马文件, 其次上传文件必须能够被执行, 最后就是上传文件的路径必须可知 ...
- js常见正则表达式
常见正则匹配表达式 export let rege = { //验证URL isUrl: (val) => { if (val == null || val == "") r ...