MySQL 布尔全文搜索
简介:在本教程中,您将学习如何执行MySQL布尔全文搜索。此外,您将学习如何使用布尔运算符来形成非常复杂的搜索查询。
MySQL布尔全文搜索简介
除了
自然语言全文搜索,MySQL还支持另一种形式的全文搜索,称为布尔全文搜索。在布尔模式下,MySQL搜索单词而不是自然语言搜索中的
概念。
MySQL允许您在布尔模式下基于非常复杂的查询以及布尔运算符执行全文搜索。这就是布尔模式下的全文搜索适合有经验的用户的原因。
要在布尔模式下执行全文搜索,请使用
AGAINST
表达式中的
IN BOOLEAN MODE
修饰符。以下示例说明如何搜索产品名称中包含
Truck
单词的产品。
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 (0.00 sec)
返回两个产品名称包含
Truck
单词的产品。
要查找产品名称中包含
Truck
单词但不包含任何行的产品,
Pickup
可以使用运算符(
-
)返回排除
Pickup
关键字的结果,如下所示:
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 (0.00 sec)
MySQL布尔全文搜索运算符
下表说明了全文搜索布尔运算符及其含义:
操作者 |
描述 |
+ |
包括,这个词必须存在。 |
- |
排除,词不得出现。 |
> |
包括,并提高排名值。 |
< |
包括,并降低排名值。 |
() |
将单词分组为子表达式(允许将它们作为一组包括在内,排除在外,排名等等)。 |
〜 |
否定单词的排名值。 |
* |
通配符在这个词的结尾。 |
“” |
定义短语(与单个单词列表相对,整个短语匹配以包含或排除)。 |
以下示例说明如何在搜索查询中使用布尔全文运算符:
示例 |
描述 |
'mysql tutorial' |
要搜索包含两个单词中至少一个的行:mysql或tutorial |
'+ mysql + tutorial' |
要搜索包含两个单词的行:mysql和tutorial |
'+ mysql tutorial' |
要搜索包含单词“mysql”的行,但为包含“tutorial”的行添加更高的排名: |
'+ mysql -tutorial' |
要搜索包含单词“mysql”但不包含“tutorial”的行 |
'+ mysql~tutorial' |
要搜索包含单词“mysql”的行,如果它包含单词“tutorial”,则将行排名更低。 |
'+ mysql +(> tutorial <training)' |
要以任何顺序搜索包含单词“mysql”和“tutorial”,或“mysql”和“training”的行,但将包含“mysql tutorial”的行放在“mysql training”之上。 |
'my*' |
要查找包含以“my”开头的单词的行,例如“mysql”,“myyahoo”等,请使用以下命令: |
MySQL布尔全文搜索主要功能
- MySQL不会按照布尔全文搜索中相关性降低的顺序自动对行进行排序。
- 要执行布尔查询,InnoDB表要求
MATCH
表达式的所有列都有FULLTEXT
索引。请注意,虽然搜索速度很慢,但MyISAM表并不需要这样。
- MySQL在InnoDB表上的搜索查询中不支持多个布尔运算符,例如'++ mysql'。如果你这样做,MySQL将返回错误。但是,MyISAM的行为有所不同。它忽略其他运算符并使用最接近搜索词的运算符,例如,'+ -mysql'将变为'-mysql'。
- InnoDB全文搜索不支持尾随加号(+)或减号( - )。它只支持前导加号或减号。如果搜索单词是'mysql +'或'mysql-',MySQL将报告错误。此外,带有通配符的以下前导加号或减号无效:+ *,+ -
- 未应用50%阈值。顺便说一句,50%阈值意味着如果一个单词出现在超过50%的行中,MySQL将在搜索结果中忽略它。
在本教程中,我们向您展示了如何使用许多有用的布尔运算符执行MySQL布尔全文搜索。