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
要以任何顺序搜索包含单词“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布尔全文搜索。
本文详细介绍了MySQL的布尔全文搜索,包括如何使用布尔运算符构造复杂查询,以及布尔搜索的特点和限制。通过示例展示了如何在搜索中包含、排除关键词,以及调整搜索权重。同时,指出了InnoDB和MyISAM表在布尔全文搜索中的差异和注意事项。
1611

被折叠的 条评论
为什么被折叠?



