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使用全文索引实现大字段的模糊查询的更多相关文章

  1. mybatise 实现同一字段多模糊查询

    mybatise 同一字段多模糊查询 <foreach collection="typeList" index="index" item="it ...

  2. django中多个字段的模糊查询

    django中多个字段的模糊查询 使用Entity.objects.filter(name_contains='kris').filter(address='beijing') 这个方法是指名字包含k ...

  3. mysql 单表下的字段操作_查询

    查询的规律 查询语句限定条件越多,查询范围越小: 1.整个表 Select * From 库名.表名 2.整个表的某字段内 Select id From 库名.表名 3.整个表某字段的范围内 Sele ...

  4. MySQL中int类型的字段使用like查询方法

    方法参考自: http://stackoverflow.com/questions/8422455/performing-a-like-comparison-on-an-int-field 也就是使用 ...

  5. Mybatis 一个搜索框对多个字段进行模糊查询

    <select id="list" parameterType="ParamConfigCondition" resultType="Param ...

  6. Oracle Blob 字段的模糊查询

    原文地址:http://blog.csdn.net/springk/article/details/6866248

  7. 怎么对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. ...

  8. myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法

    参考:https://blog.csdn.net/rainbow702/article/details/50519424 like CONCAT('%', #{mkName}, '%')

  9. MySQL数据库一个字段对应多个值得模糊查询

    当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 select * from a where name like 'a%' or name like 'b%' ....or ...; 但是 ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:复选框checkBox的tristate属性

    在Qt Designer中,tristate属性是复选框checkBox相比较于QAbstractButton多出来的唯一属性. tristate属性表示复选框是三种状态还是两种状态,如果trista ...

  2. 关于utf-8编码值 [ASIS 2019]Unicorn shop

    0x00 前言 这题拿到之后有点懵,后来看了 网上的 wp 更加懵,网上大多数都是直接说 去 compart 搜thousand,然后找个大于1337 的就可以,至于为什么?基本都没有给出解答.于是乎 ...

  3. 测试与发布( Alpha版本 )

    THE BUG 团队 杨梓琦 温海源 李华 陈杰才 郑堡恩 钟明康 软件说明 本软件用MYSQL数据库保存所有的数据内容,因此可以通过查询数据库查询功能是否正常进行. 测试过程 在测试过程中,左右两张 ...

  4. CSS基础-Flexbox

    flexbox 是一种一维的布局模型,它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力. 说 flexbox 是一种一维的布局,是因为一个 flexbox 一次只能处理一个维度上的元素 ...

  5. 惊天秘密!如何在 Flutter 项目中实现操作引导

    不要冒然评价我,你只知道我的名字,却不知道我的故事,你只是听闻我做了什么,却不知我经历过什么. 俗话说得好,产品有三宝,弹窗浮层加引导. 上图截图自我司 App 晓黑板中的口算模块,相信每个 App ...

  6. Mysql5.7.20安装文档

    Mysql5.7.20安装文档 一.Linxu下数据库的恢复和备份 当我们MySQL数据库保存重要数据的时候,备份工作极为重要.本文介绍如何使用mysqldump备份和恢复数据,使用该方法,可以将数据 ...

  7. Jenkins的war包安装

    安装Jenkins首先要安装jdk,在官网下载jdk安装并配置环境变量 1.Jenkins下载地址,下载war包 https://www.jenkins.io/download/ 2.打开命令行窗口, ...

  8. 推荐系统实践 0x0f AutoRec

    从这一篇开始,我们开始学习深度学习推荐模型,与传统的机器学习相比,深度学习模型的表达能力更强,并且更能够挖掘出数据中潜藏的模式.另外.深度学习模型结构也非常灵活,能够根据业务场景和数据结构进行调整.还 ...

  9. mysql多实例启动、关闭

    启动(指定参数文件): [root@mysql01 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf & [root@mysql01 ~]# ...

  10. Git中一个由readme.md文件引起的问题

    githup中建立远程仓库时,勾选了创建readme文件,本地仓库无法push,解决方法: https://blog.csdn.net/ashencode/article/details/816249 ...