MySQL实现分词搜索(FULLTEXT)的方法
作者:Sykking之歌 发布时间:2024-01-22 17:47:40
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;
接下来添加索引
添加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(‘三国’)
结果:
可以看到,包含三国
的数据有两条,分别是书名为三国演义和作者为张三国的数据,已经成功实现分词搜索了
需要说明的是,该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服务,然后点击属性就可以看到位置了
结束
来源:https://blog.csdn.net/weixin_44001317/article/details/127260270


猜你喜欢
- 1. 得到安全字符串,在查询中使用,过滤单引号。Function Get_SafeStr(str) &nb
- 什么是钩子之前有转一篇关于回调函数的文章钩子函数、注册函数、回调函数,他们的概念其实是一样的。 钩子函数,顾名思义,就是把我们自己实现的ho
- 这篇文章主要介绍了Python检查 云备份进程是否正常运行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 我想要向您介绍能想像到的开始 GUI 编程的最简单方法,就是使用 Scriptics 的 TK 和 Tkinter 封装器。我们将与 dev
- 网上有很多免费的ip地址,都是可以使用的,但是如果手动来获取太麻烦,这里通过Python自动抓取,可以批量获取。代码如下:# -*- cod
- permuteprediction = input.view(bs, self.num_anchors, self.bbox_a
- 一、concat()函数功能:将多个字符串连接成一个字符串语法:concat(str1,str2,…) 其中的字符串既可以是数据表字段,也可
- 启发式搜索在人工智能中起着关键作用。在本章中,您将详细了解它。AI中的启发式搜索的概念启发式是一个经验法则,它引导我们找到可能的解决方案。人
- 某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘de
- 本文实例讲述了Python3爬虫学习之爬虫利器Beautiful Soup用法。分享给大家供大家参考,具体如下:爬虫利器Beautiful
- 前言本文主要给大家介绍了关于Golang中数据结构Queue实现的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
- 本文实例为大家分享了python实现局域网内聊天功能的具体代码,供大家参考,具体内容如下功能: 可以向局域网内开启接收信息功能的ip进行发送
- 最近做了一些小程序方面的性能优化,如分包加载,添加骨架屏等,这次主要说一下骨架屏的相关内容。关于骨架屏,有三种方法:1.直接请UI同学帮忙P
- 今天我想讲一讲关于Elasticsearch的索引建立,当然提前是你已经安装部署好Elasticsearch。ok,先来介绍一下Elatic
- 安装显示目录功能:pip install jupyter_contrib_nbextensions配置:安装完之后需要配置 nbextens
- 从python2到python3,这两个版本可以说是从语法、编码等多个方面上都有很大的差别。为了不带入过多的累赘,Python 3.0在设计
- PHP字符串函数包括查找字符位置函数;提取子字符函数;替换字符串;字符长度;比较字符函数;分割成数组字符;去除空格等等。PHP语言中的字符串
- 常用的网站性能测试指标有:并发数、响应时间、吞吐量、性能计数器等。1、并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力
- 一、Tensor 之间的运算规则相同大小 Tensor 之间的任何算术运算都会将运算应用到元素级不同大小 Tensor(要求dimensio
- 企业管理器中的Tools,Database Maintenance Planner,可以设置数据库的定期自动备份计划。并