MySQL布尔全文搜索

时间:2019-11-20 08:52:21  来源:igfitidea点击:

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

MySQL布尔全文搜索简介

除了自然语言全文搜索之外,MySQL还支持另一种形式的全文搜索,称为布尔全文搜索。
在布尔模式下,MySQL搜索单词而不是自然语言搜索中的概念。

MySQL允许您在布尔模式下与布尔运算符一起基于非常复杂的查询执行全文搜索。
这就是为什么布尔模式下的全文搜索适合有经验的用户的原因。

要在布尔模式下执行全文搜索,请在AGAINST表达式中使用IN BOOLEAN MODE修饰符。
以下示例显示了如何搜索产品名称包含"卡车"字词的产品。

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

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

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

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

MySQL布尔全文搜索运算符

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

OperatorDescription
+Include, the word must be present.
Exclude, the word must not be present.
>Include, and increase ranking value.
<Include, and decrease the ranking value.
()Group words into subexpressions (allowing them to be included, excluded, ranked, and so forth as a group).
~Negate a word’s ranking value.
*Wildcard at the end of the word.
“”Defines a phrase (as opposed to a list of individual words, the entire phrase is matched for inclusion or exclusion).

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

要搜索至少包含两个单词之一的行:mysql或tutorial

``mysql教程''

要搜索包含两个单词的行:mysql和tutorial

‘+ mysql +教程’

要搜索包含单词" mysql"的行,但将包含" tutorial"的行的排名更高:

``+ mysql教程''

搜索包含单词" mysql"但不包含" tutorial"的行

``+ mysql-教程''

搜索包含单词" mysql"的行,如果包含单词" tutorial"的行排名较低。

‘+ mysql〜教程’

要以任意顺序搜索包含单词" mysql"和" tutorial"或" mysql"和" training"的行,但将包含" mysql tutorial"的行置于比" mysql training"更高的位置。

‘+ mysql +(>教程<培训)’

要查找包含以" my"开头的单词(例如" mysql"," mydatabase"等)的行,请使用以下命令:

‘我的*’

MySQL布尔全文搜索的主要功能

  • MySQL不会在布尔全文搜索中按相关性自动按降序对行进行排序。

  • 要执行布尔查询,InnoDB表要求MATCH表达式的所有列都具有FULLTEXT索引。
    请注意,尽管搜索速度很慢,但MyISAM表不需要这样做。

  • 对于InnoDB表(例如" ++ mysql")的搜索查询,MySQL不支持多个布尔运算符。
    如果这样做,MySQL将返回错误。
    但是,MyISAM的行为有所不同。
    它会忽略其他运算符,并使用最接近搜索词的运算符,例如," +-mysql"将变为" -mysql"。

  • InnoDB全文本搜索不支持尾随加号(+)或减号(-)。
    它仅支持前导正号或负号。
    如果您搜索的单词是" mysql +"或" mysql-",MySQL将报告错误。
    此外,以下带通配符的前加号或减号无效:+ *,+-

  • 50%阈值意味着如果一个单词出现在超过50%的行中,MySQL将在搜索结果中忽略它。

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