mysql5.7.25使用全文检索功能的实例教程

目录
  • 前言
  • 1. 创建带有全文索引的表
  • 2. 添加全文索引
  • 3. 添加测试数据
  • 4. 执行查询
  • 5. 语法
  • 总结

前言

有时项目中需要用到全文检索功能,如果全文检索数量相对较小,并且不希望单独搭建elasticsearch这样的专用索引工具,就可以考虑使用mysql自带的全文检索功能。

mysql 5.7.25自带的全文检索功能,有一定的方便性。

在mysql 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。

从mysql 5.7.6开始,mysql内置了ngram全文解析器,用来支持中文、日文、韩文分词。

本文使用的mysql 版本是5.7.25,innodb数据库引擎。

1. 创建带有全文索引的表

create table `tbl_article_content` (
  `id` bigint(40) not null auto_increment,
  `article_title` varchar(60) comment '标题',
  `article_summary` varchar(120) comment '摘要',
  `article_content` text not null comment '内容',
  `article_id` bigint(40) not null comment '对应文章id',
  `create_date` datetime not null comment '创建时间',
  `modified_date` datetime not null comment '更新时间',
  primary key (`id`) using btree,
  key `artid` (`article_id`) using btree,
  fulltext key `article_content` (`article_content`) /*!50100 with parser `ngram` */ 
) engine=innodb auto_increment=5 default charset=utf8 row_format=dynamic;

/*!50100   */ 它表示5.01.00 版本或者更高的版本,才执行.

 with parser `ngram`是指定分词引擎。

2. 添加全文索引

如果在创建表的时候未添加全文索引,可以在建表之后进行添加。

create fulltext index article_content on tbl_article_content(article_content) with parser ngram;

3. 添加测试数据

insert into `tbl_article_content` values ('2', '文章标题', '文章摘要', '文章内容', '2', '2022-02-05 13:47:55', '2022-02-05 13:47:59');

4. 执行查询

mysql> select * from tbl_article_content222 where match(article_content) against('内容');
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
| id | article_title | article_summary | article_content | article_id | create_date         | modified_date       |
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
|  2 | 文章标题      | 文章摘要        | 文章内容        |          2 | 2022-02-05 13:47:55 | 2022-02-05 13:47:59 |
+----+---------------+-----------------+-----------------+------------+---------------------+---------------------+
1 row in set

全文查询的关键字为match和against。

5. 语法

match (col1,col2,...) against (expr [search_modifier])
search_modifier: { in boolean mode | with query expansion }

 例如:select * from tab_name where match (‘列名1,列名2…列名n’) against(‘词1 词2 词3 … 词m’);

 即:match 相当于要匹配的列,而 against 就是要找的内容。

总结

到此这篇关于mysql5.7.25使用全文检索功能的文章就介绍到这了,更多相关mysql5.7.25使用全文检索内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐