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. ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

    ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...

  2. 【JAVA】SSM开源项目源码--城市学院移动后勤-毕业设计(Spring SpringMvc Mybatis Mui Redis )

    项目简介 大学时期老师给我做的项目,学校后勤管理中心,也作为毕业设计项目. 有 后勤保修 二手交易 失物招领 后勤通知 等功能. 城市学院移动后勤 有APP端(webapp)和WEB端(PC) 后端使 ...

  3. FirstCode异常 此引用关系将导致不允许的周期性引用

    FirstCode异常 此引用关系将导致不允许的周期性引用 一般由多表里的外键互相引用引起. 解决方法: 1.去掉对应数据类里的外键对应的对象属性. 2.去掉该外键. [Table("TAs ...

  4. 最简 Spring AOP 源码分析!

    前言 最近在研究 Spring 源码,Spring 最核心的功能就是 IOC 容器和 AOP.本文定位是以最简的方式,分析 Spring AOP 源码. 基本概念 上面的思维导图能够概括了 Sprin ...

  5. typora字体与字体颜色

    字体 基本格式:\字体信息{内容} 罗马体\rm \rm{罗马体abc}>>\(\rm{罗马体abc}\) 意大利体\it \it{意大利体}>>\(\it{意大利体}\) 等 ...

  6. nginx学习之——信号控制和配置

    一.信号控制 1)TERM, INT   Quick shutdown  \\麻溜停掉(暴力停止),一般不常用 // 启动和停止nginx 当前目录:/usr/local/bin/nginx 启动: ...

  7. JS复习之深浅拷贝

    一.复习导论(数据类型相关) 想掌握JS的深浅拷贝,首先来回顾一下JS的数据类型,JS中数据类型分为基本数据类型和引用数据类型. 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以 ...

  8. 【UnitTest】使用方法

    UnitTest安装 pip install unittest 详细教程: https://www.cnblogs.com/yufeihlf/p/5707929.html断言:  DDT数据驱动: c ...

  9. Object.assign 之后 点对象 找不到

    export function CopyObject(val) {   return JSON.parse(JSON.stringify(val)); }

  10. 推荐系统实践 0x10 Deep Crossing

    这一篇,我们将介绍微软BING AD团队提出的Deep Crossing模型,用来解决大规模特征组合问题的模型,这些特征可以是稠密的,也可以是稀疏的,从而避免了人工进行特征组合,并使用了当年提出的残差 ...