前言
其实全文搜索在MySQL中早就支持了,但是一直只支持英文,原因在于它一直使用空格作为分词器,但是对于中文来说,空格显然不太适合,需要根据中文语义进行分词。现在从MySQL 5.7开始,MySQL内置了ngram全文搜索插件支持中文分词,并且对于和引擎都效果显著。
在使用中文搜索分词插件ngram之前,首先要在MySQL配置文件中设置其分词大小,例如
[]
=2
这里将分词大小设置为2,记住,分词大小越大,索引大小也会越大,所以要根据自己的情况设置合适的大小。
表结构示例:
桌子 (
id NOT NULL KEY,(200),body TEXT, (title,body) WITH ngram
) = 设置;
样本数据有6行记录。
mysql> * 来自 \G
****************************1. 行 ****************************
编号:1
标题:数据库管理
在本教程中,我将向您展示如何管理数据库
****************************2. 行 ****************************
编号:2
标题:数据库应用程序开发
正文:学习开发数据库应用程序
****************************3. 行 ****************************
编号:3
标题:MySQL 完全手册
正文:了解有关 MySQL 的一切
****************************4. 行 ****************************
编号:4
标题:数据库和事务处理
正文:数据库事务理论的系统学习
****************************5. 行 ****************************
编号:5
标题:NoSQL的本质
正文:了解各种非结构化数据库
****************************6. 行 ****************************
编号:6
标题:SQL语言详解
正文:详细了解如何使用各种 SQL
6 行插入(0.00 秒)
明确指定全文搜索表源
mysql>="/";
查询成功,0 行(0.00 秒)
通过系统表可以看到数据是如何划分的。
mysql> *来自.E 限制 20,10;
+------+--------------+-------------+-----------+--------+-------++
| 字 | | | | | |
+------+--------------+-------------+-----------+--------+-------++
| 中美| 2 | 2 | 1 | 2 | 28 |
| Xim | 4 | 4 | 1 | 4 | 21 |
| 已学会 | 6 | 6 | 1 | 6 | 16 |
| 希凯 | 3 | 3 | 1 | 3 | 25 |
| 练习数字 | 5 | 5 | 1 | 5 | 37 |
| 理解 | 6 | 7 | 2 | 6 | 19 |
| 理解 | 6 | 7 | 2 | 7 | 23 |
| 事务 | 5 | 5 | 1 | 5 | 12 |
| 事务 | 5 | 5 | 1 | 5 | 40 |
| 管赫| 2 | 2 | 1 | 2 | 52 |
+------+--------------+-------------+-----------+--------+-------++
共 10 行 (0.00 秒)
这里我们可以看到,当分词长度设置为2时,所有的数据都是2条一组的。上面的数据还包含了行位置,ID等信息。
接下来,我将用与原始英文搜索相同的方法演示一系列搜索。
1、自然语言模式检索:
1.获取合格商品的数量。
mysql> COUNT(*) 来自
-> WHERE MATCH (标题,正文) ('数据库' IN MODE);
+----------+
| 计数(*) |
+----------+
| 4 |
+----------+
一组 1 行(0.05 秒)
2. 获取匹配率,
mysql> id,MATCH (title,body) ('数据库' 模式)
AS 分数来自;
+----+----------------------+
| 编号| 分数 |
+----+----------------------+
| 1 | 0. |
| 2 | 0. |
| 3 | 0 |
| 4 | 0. |
| 5 | 0.|
| 6 | 0 |
+----+----------------------+
共 6 行 (0.00 秒)
2. 布尔模式搜索比自然模式搜索更复杂:
1. 匹配已管理且在数据库中的记录,
mysql> * 来自匹配(标题,正文)
-> ('+数据库+管理' 模式);
+----+------------+-----------------------+
| ID| 标题| 正文|
+----+------------+-----------------------+
| 1 | 数据库管理 | 在本教程中,我将向您展示如何管理数据库 |
+----+------------+-----------------------+
1 行 (0.00 秒)
2.有数据库可以匹配,但是没有管理记录。
mysql> * 来自匹配(标题,正文)
-> ('+数据库管理' 模式);
+----+------------------+----------------------------+
| ID| 标题| 正文|
+----+------------------+----------------------------+
| 2 | 数据库应用程序开发 | 学习开发数据库应用程序 |
| 4 | 数据库与事务处理 | 系统学习数据库事务概述 |
| 5 | NoSQL的本质 | 了解各种非结构化数据库 |
+----+------------------+----------------------------+
共 3 行 (0.00 秒)
3.与MySQL匹配,但降低数据库的相关性。
mysql> * 来自匹配(标题,正文)
-> ('>数据库+MySQL' 模式);
+----+---------------+-----------------+
| ID| 标题| 正文|
+----+---------------+-----------------+
| 3 | 完整的 MySQL 手册 | 了解有关 MySQL 的一切 |
+----+---------------+-----------------+
1 行 (0.00 秒)
3.查询扩展模式,比如你要搜索数据库,那么MySQL,DB2也会被搜索。
mysql> * 来自
-> 其中匹配(标题,正文)
-> ('数据库' 带查询 );
+----+------------------+--------------------------------------+
| ID| 标题| 正文|
+----+------------------+--------------------------------------+
| 1 | 数据库管理 | 在本教程中,我将向您展示如何管理数据库 |
| 4 | 数据库与事务处理 | 系统学习数据库事务概述 |
| 2 | 数据库应用程序开发 | 学习开发数据库应用程序 |
| 5 | NoSQL的本质 | 了解各种非结构化数据库 |
| 6 | SQL语言详解 | 详细了解如何使用各种SQL |
| 3 | 完整的 MySQL 手册 | 了解有关 MySQL 的一切 |
+----+------------------+--------------------------------------+
每组 6 行(0.01 秒)
当然我这里只是演示功能,更多的性能测试,大家有兴趣可以做详细测试。由于N-grm是中文搜索常用的分词算法,在互联网上应用非常广泛,所以这次集成到MySQL中,在性能方面应该不会有太大的问题。
总结
以上就是本文的全部内容了,希望本文的内容能够对大家的学习或者工作起到一定的帮助,如果还有疑问的话,大家可以留言交流。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。