网络编程
位置:首页>> 网络编程>> 数据库>> MySQL实现分词搜索(FULLTEXT)的方法

MySQL实现分词搜索(FULLTEXT)的方法

作者:Sykking之歌  发布时间:2024-01-22 17:47:40 

标签:MySQL,分词搜索,FULLTEXT

FULLTEXT

以前使用查找时都是以 %关键字% 进行模糊查询结果的,这种查询方式有一些缺点,比如不能查询多个列必须手动添加条件以实现,效率不高等
现在有一种新的查找方式可以解决以上问题,就是使用全文索引进行查找
注意:并非所有存储引擎都支持全文搜索功能。在MySQL 5.6或更高版本中,只有MyISAM和InnoDB存储引擎支持全文搜索。

全文搜索的简单使用

建表添加FULLTEXT索引

使用该技术非常简单,首先需要有一张表,我建立了一张图书表并插入了两条数据

CREATE TABLE `book`  (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `book_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
 `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
 `publisher` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
 PRIMARY KEY (`id`) USING BTREE,
 FULLTEXT INDEX `bookname_author_publisher_fulltext`(`book_name`, `author`, `publisher`) WITH PARSER `ngram`
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

MySQL实现分词搜索(FULLTEXT)的方法

接下来添加索引

添加FULLTEXT索引的语法是

CREATE FULLTEXT INDEX index_name ON table_name(idx_column_name,…)

但是由于我们需要分词搜索,MySQL本身不支持中文分词,所以在使用全文索引时需要引入Ngram解析器使得支持中文分词搜索(MySQL版本大于5.6),只需要在创建索引时在语句后面添加WITH PARSER NGRAM 即可
例如,创建了一个支持以书名,作者和出版社为搜索条件的全文索引语法如下
create FULLTEXT index bookname_author_publisher on book(book_name,author,publisher) WITH PARSER ngram

尝试搜索

现在,我们已经创建好了索引,它支持以书名,作者和出版社的内容进行搜索,我们尝试搜索下包含三国的数据
select * from book where MATCH(book_name,author,publisher) against(‘三国’)
结果:

MySQL实现分词搜索(FULLTEXT)的方法

可以看到,包含三国的数据有两条,分别是书名为三国演义和作者为张三国的数据,已经成功实现分词搜索了
需要说明的是,该Ngram解析器默认的分词长度(ngram_token_size)是2,也就是说,默认是以2个字符进行分词的,如果你只搜索1个字符的话是不会有任何结果的,但是这个值可以自定义。

  • 查看分词长度 SHOW VARIABLES LIKE ‘ngram_token_size’;

  • 修改分词长度 在MySQL的配置文件中(.ini)找到[mysqld]字样的地方,在下方添加ngram_token_size=1即可修改为支持1个字符起搜索(范围1~10)

关于MySQL的配置文件的位置,如果你是压缩包安装的应该直接就能找到,如果是通过安装程序安装的话可以从服务中找到你的MySQL服务,然后点击属性就可以看到位置了

MySQL实现分词搜索(FULLTEXT)的方法

结束

来源:https://blog.csdn.net/weixin_44001317/article/details/127260270

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com