MySQL Boolean Full-Text Searches

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

MySQL布尔全文搜索简介

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

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

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

SELECT productName, productline
FROM products
WHERE MATCH(productName) 
      AGAINST('Truck' IN BOOLEAN MODE )Code language: SQL (Structured Query Language) (sql)

mysql 布尔 tex 搜索 - 带有关键字 Truck 的产品名称
返回两个产品名称中包含Truck单词的产品。

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

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE )Code language: SQL (Structured Query Language) (sql)
mysql 使用布尔运算符进行布尔 tex 搜索

MySQL 布尔全文搜索运算符

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

操作员描述
+包括,这个词必须出现。
排除,该词不得出现。
>包含并提高排名价值。
<包括和减少排名值。
()将单词分组为子表达式(允许将它们作为一个组进行包含、排除、排名等)。
否定单词的排名值。
*通配符位于单词末尾。
“”定义一个短语(与单个单词的列表相反,整个短语匹配包含或排除)。

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

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

'mysql教程'

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

'+mysql +教程'

要搜索包含单词“mysql”的行,但为包含“tutorial”的行设置较高的排名:

'+mysql教程'

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

'+mysql-教程'

搜索包含单词“mysql”的行,如果包含单词“tutorial”,则将该行排名较低。

'+mysql ~教程'

以任意顺序搜索包含单词“mysql”和“tutorial”或“mysql”和“training”的行,但将包含“mysqltutorial”的行放在高于“mysqltraining”的行。

'+mysql +(>教程<培训)'

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

'我的*'

MySQL布尔全文搜索主要功能

  • MySQL 不会在布尔全文搜索中自动按相关性降序对行进行排序。
  • 为了执行布尔查询,InnoDB表要求MATCH表达式的所有列都有FULLTEXT索引。请注意,MyISAM 表不需要这样做,尽管搜索速度相当慢。
  • MySQL 不支持在 InnoDB 表上的搜索查询中使用多个布尔运算符,例如“++mysql”。如果这样做,MySQL 将返回错误。然而,MyISAM 的行为有所不同。它会忽略其他运算符并使用最接近搜索词的运算符,例如“+-mysql”将变为“-mysql”。
  • InnoDB 全文搜索不支持尾随加号 (+) 或减号 (-)。它仅支持前导加号或减号。如果你搜索的词是“mysql+”或“mysql-”,MySQL会报错。另外,以下带有通配符的前导加号或减号无效:+*、+-
  • 50%阈值意味着如果某个单词出现在超过50%的行中,MySQL将在搜索结果中忽略它。

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

本教程有帮助吗?