MySQL 8中使用全文检索示例

首先建议张册测试用的表test,并使用fulltext说明将titlebody两列的数据加入全文检索的索引列中:

drop table if exists test;
create table test (
    id integer not null primary key auto_increment,
    title varchar(50),
    body longtext,
    fulltext(title, body) with parser ngram
);

然后往其中插入数据:

insert into test (title, body) values
(‘金缕衣‘, ‘劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。‘),
(‘送别‘, ‘山中相送罢,日暮掩柴扉。春草明年绿,王孙归不归。‘),
(‘春晓‘, ‘春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。‘),
(‘江雪‘, ‘千山鸟飞绝,万径人踪灭。孤舟蓑笠翁,独钓寒江雪。‘),
(‘何满子‘, ‘故国三千里,深宫二十年。一声何满子,双泪落君前。‘);

然后我们可以执行如下语句来查询“山”这个字:

select * from test where match(title, body) against (‘金缕衣‘ in natural language mode);

结果如下:

mysql> select * from test where match(title, body) against (‘金缕衣‘ in natural language mode);
+----+-----------+--------------------------------------------------------------------------------------------------+
| id | title     | body                                                                                             |
+----+-----------+--------------------------------------------------------------------------------------------------+
|  1 | 金缕衣    | 劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。                                 |
+----+-----------+--------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

或者我们可以用bool模式查看即包含“三千”又包含“二十”的数据:

select * from articles where match(title, body) against (‘+三千 +二十‘ in boolean mode);

结果如下:

mysql> select * from test where match(title, body) against (‘+三千 +二十‘ in boolean mode);
+----+-----------+--------------------------------------------------------------------------+
| id | title     | body                                                                     |
+----+-----------+--------------------------------------------------------------------------+
|  5 | 何满子    | 故国三千里,深宫二十年。一声何满子,双泪落君前。                         |
+----+-----------+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

更多信息请参考这篇博客,写的非常好!:https://www.jianshu.com/p/645402711dac

原文地址:https://www.cnblogs.com/zifeiy/p/10345420.html

时间: 2024-08-06 21:42:00

MySQL 8中使用全文检索示例的相关文章

在MySQL字段中使用逗号分隔符

大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性. 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 mysql> SELECT * FROM content; +----+------+ | id | tags | +----+------+ | 1 | 1

MySQL语句中的转义字符

MySQL语言中的转义字符和各种编程语言基本相同,见下表 形式 含义 \0 0(NUL)字符 \n 换行 \r 回车符 \t 制表符 \b 退格 \' 单引号 \" 双引号 \\ 反斜线 \% %符(用于区分模式匹配中的%) \_ _符(用于区分模式匹配中的_) 举其中一个用的比较多的'\n'为例,执行以下SQL语句结果大家应该都知道,但是对于上面的图,大家是不是看起来有点别扭?的确,因为我们看到不仅是结果出现了换行,就连select语句中的表达式也换行了,这是因为表达式是处理之后显示的,只不过

java中JDBC应用示例实验

一.先下载mysql-connector-java-x.x.x-bin.jar包 下载mysql-connector-java-x.x.x-bin.jar,目前最新版为mysql-connector-java-5.1.22-bin.jar.( 在Eclipse中,选择 项目->属性->Java构建路径,在"库"选项卡中,选择"添加外部JAR",找到下载的mysql-connector-java-5.1.22-bin.jar文件,将其添加进项目. 再次编译

mysql 语句中的national 、 comment

create table hms.as_othersassess(   assessid             national varchar(16) not null comment '评估编号+24位客户id+6位随机',   customerid           national varchar(13) comment '客户编号',   allergy              national varchar(500) comment '过敏史',   injury      

?ECharts中BasicLine图+将mysql数据库中的方式通过echarts可视化

ECharts官网示例: 1 option = { 2 xAxis: { 3 type: 'category', 4 data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 5 }, 6 yAxis: { 7 type: 'value' 8 }, 9 series: [{ 10 data: [820, 932, 901, 934, 1290, 1330, 1320], 11 type: 'line' 12 }] 13 }; View Cod

MySQL数据库中的四种隔离级别

原文:MySQL数据库中的四种隔离级别 事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别.通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低 READ UNCOMMITTED 该级别为未提交读.在该级别中,事务中的修改即使没有提交,对其他事务也都是可见的.事务可以读取未提交的数据,这也被称为脏读.这个级别会导致很多的问题,从性能上来说,它不会比其他级别好太多,但缺乏其他级别的很多好处.除非真的有非常必要的理由,在实际应用中一般很少使用. READ COMMIT

MySQL数据库中的算术运算符

MySQL数据库中的算数运算符 MySQL数据库中的算术运算符 一.运算符的概述: 运算符在MySQL数据库中也是很重要的知识体,在执行sql语句的时候这个运算符对操作数据帮助很大.其中运算符的运用可以帮助你减省大量的时间,操作起来也比较灵活. 二.运算符 运算符主要包括"算数运算符"."比较运算符"."罗运算符"."位运算符"四大类,下面我们就一次学习一下. 1.算术运算符 算术运算符在sql语句的时候经常使用,例如对表的字

在mysql语句中为什么要加反引号

在MySQL语句中我们有时候经常会遇到反引号(``),刚开始的时候不知道什么意思,他是什么作用呢? Select * from `member` order by posts desc limit 0,10; 它是为了区分MYSQL的保留字与普通字符而引入的符号. 举个例子:SELECT `select` FROM `test` WHERE select='字段值' 在test表中,有个select字段,如果不用反引号,MYSQL将把select视为保留字而导致出错,所以,有MYSQL保留字作为

Mysql存储过程中使用cursor

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11