MySQL布林全文搜尋

2019-10-16 22:55:34

在本教學中,您將學習如何執行MySQL布林全文搜尋。 此外,您將學習如何使用布林運算子來組成非常複雜的搜尋查詢。

MySQL簡介全文檢索

除了自然語言全文搜尋,MySQL還支援一種叫作布林全文搜尋的全文搜尋的附加形式。在布林模式中,MySQL搜尋詞而不是自然語言搜尋中的概念。

MySQL允許您根據布林模式下的非常複雜的查詢以及布林運算子執行全文搜尋。這就是為什麼布林模式的全文搜尋適合有經驗的使用者。

要在布林模式下執行全文搜尋,您可以在AGAINST表示式中使用IN BOOLEAN MODE修飾符。 以下範例說明如何搜尋產品名稱中包含單詞Truck的產品。

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

執行上面查詢語句,得到以下結果 -

mysql> 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

返回產品名稱包含Truck的兩個產品。

要查詢產品名稱包含單詞Truck但不包含Pickup的行的產品,可以使用排除布林運算子( - ),該運算子返回不包括Pickup關鍵字的結果,如以下查詢:

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

執行上面查詢語句,得到以下結果 -

mysql> 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

MySQL布林全文搜尋運算子

下表說明了全文搜尋布林運算子及其含義:

操作符 描述
+ 包括,這個詞必須存在。
- 排除,這個詞不能存在。
> 包括並增加排名值。
< 包括並降低排名值。
() 將單詞分組成子表示式(允許將其包括,排除,排序等作為一個組)。
~ 否定一個詞的排名值。
* 萬用字元,在結尾的單詞
「」 定義一個短語(與單個單詞列表相反,整個短語匹配包含或排除)。

以下範例說明如何在搜尋查詢中使用布林全文運算子:

要搜尋包含兩個詞中至少一個詞的行:mysqltutorial,可使用:mysql tutorial
要搜尋包含兩個單詞的行:mysqltutorial,可使用:+mysql +tutorial
要搜尋包含單詞「mysql」的行,但為含有「tutorial」的行排列較高的排名:可使用:+mysql tutorial
要搜尋包含單詞「mysql」而不是「tutorial」的行,可使用:+mysql -tutorial
要搜尋包含單詞「mysql」的行,如果包含單詞「tutorial」,則將行排列,可使用:+mysql ~tutorial
要搜尋包含單詞「mysql」和「tutorial」,或「mysql」和「training」的行以任何順序排列,但將包含「mysql tutorial」的行高於「mysql training」。可使用:+mysql +(>tutorial <training)

要查詢包含以「my」開頭的單詞的行,例如「mysql」,「myspace」等,請使用以下命令:my*

MySQL布林全文搜尋主要功能

  • MySQL不按照布林全文搜尋中相關性降低的順序自動排序行。
  • 要執行布林查詢,InnoDB表需要MATCH表示式的所有列具有FULLTEXT索引。 請注意,MyISAM表不需要這個,儘管搜尋速度相當慢。
  • MySQL在InnoDB表上的搜尋查詢上不支援多個布林運算子,例如++mysql。 如果這樣做,MySQL將返回錯誤。 但是,MyISAM的行為方式不一樣。它忽略其他運算子並使用最接近搜尋詞的運算子,例如+ -mysql將成為-mysql
  • InnoDB全文搜尋不支援尾部加號(+)或減號(-)號。 它只支援前加號或減號。 如果搜尋字是mysql+mysql-,MySQL將會報錯。 另外,以下帶有萬用字元的正加號或負號無效:+*+-
  • 不適用50%閾值。順便說一下,50%閾值意味著如果一個詞出現在超過50%的行中,MySQL將在搜尋結果中忽略它。

在本教學中,我們向您展示了如何使用許多有用的布林運算子執行MySQL布林全文搜尋。