求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL布尔全文搜索
562 次浏览
5次  

在本教程中,您将学习如何执行MySQL布尔全文搜索。 此外,您将学习如何使用布尔运算符来组成非常复杂的搜索查询。

MySQL简介全文检索

除了自然语言全文搜索,MySQL还支持一种叫作布尔全文搜索的全文搜索的附加形式。在布尔模式中,MySQL搜索词而不是自然语言搜索中的概念。

MySQL允许您根据布尔模式下的非常复杂的查询以及布尔运算符执行全文搜索。这就是为什么布尔模式的全文搜索适合有经验的用户。

要在布尔模式下执行全文搜索,您可以在AGAINST表达式中使用IN BOOLEAN MODE修饰符。 以下示例说明如何搜索产品名称中包含单词Truck的产品。

SELECT productName, productline
FROM products
WHERE MATCH(productName)
AGAINST('Truck' IN BOOLEAN MODE )

执行上面查询语句,得到以下结果 -

mysql> SELECT productName, productline
FROM products
WHERE MATCH(productName)
AGAINST('Truck' IN BOOLEAN MODE );
+------------------------+------------------+
| productName | productline |
+------------------------+------------------+
| 1940 Ford Pickup Truck | Trucks and Buses |
| 1940s Ford truck | Trucks and Buses |
+------------------------+------------------+
2 rows in set

返回产品名称包含Truck的两个产品。

要查找产品名称包含单词Truck但不包含Pickup的行的产品,可以使用排除布尔运算符( - ),该运算符返回不包括Pickup关键字的结果,如以下查询:

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE );

执行上面查询语句,得到以下结果 -

mysql> SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE );
+------------------+------------------+
| productName | productline |
+------------------+------------------+
| 1940s Ford truck | Trucks and Buses |
+------------------+------------------+
1 row in set

MySQL布尔全文搜索运算符

下表说明了全文搜索布尔运算符及其含义:

以下示例说明如何在搜索查询中使用布尔全文运算符:

要搜索包含两个词中至少一个词的行:mysql或tutorial,可使用:mysql tutorial;

要搜索包含两个单词的行:mysql或tutorial,可使用:+mysql +tutorial;

要搜索包含单词“mysql”的行,但为含有“tutorial”的行排列较高的排名:可使用:+mysql tutorial;

要搜索包含单词“mysql”而不是“tutorial”的行,可使用:+mysql -tutorial;

要搜索包含单词“mysql”的行,如果包含单词“tutorial”,则将行排列,可使用:+mysql ~tutorial

要搜索包含单词“mysql”和“tutorial”,或“mysql”和“training”的行以任何顺序排列,但将包含“mysql tutorial”的行高于“mysql training”。可使用:+mysql +(>tutorial <training)

要查找包含以“my”开头的单词的行,例如“mysql”,“myspace”等,请使用以下命令:my*。

MySQL布尔全文搜索主要功能

MySQL不按照布尔全文搜索中相关性降低的顺序自动排序行。

要执行布尔查询,InnoDB表需要MATCH表达式的所有列具有FULLTEXT索引。 请注意,MyISAM表不需要这个,尽管搜索速度相当慢。

MySQL在InnoDB表上的搜索查询上不支持多个布尔运算符,例如++mysql。 如果这样做,MySQL将返回错误。 但是,MyISAM的行为方式不一样。它忽略其他运算符并使用最接近搜索词的运算符,例如+ -mysql将成为-mysql。

InnoDB全文搜索不支持尾部加号(+)或减号(-)号。 它只支持前加号或减号。 如果搜索字是mysql+或mysql-,MySQL将会报错。 另外,以下带有通配符的正加号或负号无效:+*,+-

不适用50%阈值。顺便说一下,50%阈值意味着如果一个词出现在超过50%的行中,MySQL将在搜索结果中忽略它。

在本教程中,我们向您展示了如何使用许多有用的布尔运算符执行MySQL布尔全文搜索。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



562 次浏览
5次
 捐助