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. CobaltStrike3.14&3.8安装&中文乱码解决

    工具简介 Cobalt Strike 一款以 Metasploit 为基础的 GUI 框架式渗透测试工具,集成了端口转发.服务扫描,自动化溢出,多模式端口监听,exe.powershell 木马生成等 ...

  2. java springboot@GeneratedValue 注解

    springboot中@GeneratedValue作用: (1)@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键.@GeneratedValue提供了主键的生成策 ...

  3. uniapp vue 购车计算器,贷款计算器,保险计算器

    基于vue开发的买车计算器,支持uniapp 概述 项目为工作中开发,感觉比较有意思,而且能够帮助其他人快速开发功能,我就发上来了,大佬勿喷吧,没什么技术含量! uniapp打包多端[小程序类]可能会 ...

  4. linux tar 压缩和解压缩

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. 下面 ...

  5. 从0到1实战移动Web App开发

    从0到1实战移动Web App开发   教程介绍 从0到1 实战webapp,通过热门的web前端技术实现移动端app应用,先基础.后实战,在讲解的同时引导思考,会抛出自己独特的观点,一行一行写代码讲 ...

  6. 基于menu小插件探索工程实践

    目录 一.准备工作 1.C/C++环境搭建 2.VSCode的配置 (1) 安装插件: (2) 设置配置文件: 二.工程化编程实战 1.模块化设计 2.可重用设计:进一步抽象 menu的进一步优化 可 ...

  7. kafka监控之topic的lag情况监控

    需求描述:lag(滞后)是kafka消费队列性能监控的重要指标,lag的值越大,表示kafka的堆积越严重.本篇文章将使用python脚本+influxdb+grafana的方式对kafka的offs ...

  8. Flink集群监控

    prometheus+grafana 监控hadoop.yarn https://blog.csdn.net/c275090933/article/details/82108014 Prometheu ...

  9. 网络编程-python实现-TCP实现文件下载(1.1.4)

    @ 目录 代码实现 代码实现 客户端 from socket import * def main(): # 创建socket tcp_client_socket = socket(AF_INET, S ...

  10. angular 8 表单带文件上传接口

    <div id="homework"> <form (ngSubmit)="doSubmit()" enctype="multipa ...