mysql全文布尔模式速度慢_MySQL 布尔全文搜索

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

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布尔全文搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值