歡迎來到本系列的第 3 部分,本篇收錄了關於 MySQL 中的全文索引和搜尋。在第 1 部分中,我們了解了 MySQL 如何透過 FULLTEXT 索引以及以下三種不同的類型提供全文檢索搜尋功能:
- 自然語言全文檢索搜尋
- 布爾全文檢索搜尋
- 擴展查詢搜尋
在第 2 部分中,我描述了如何在 Navicat for MySQL中執行自然語言全文檢索搜尋。今天的文章緊隨其後,涵蓋了另一種全文檢索搜尋:布爾全文檢索搜尋。
布爾模式描述
布爾模式比自然語言全文檢索搜尋更受字詞導向。這樣,布爾全文檢索搜尋支援非常複雜的查詢,其中包括布爾運算子。對於經驗豐富的使用者,布爾全文檢索搜尋提供了一種執行非常進階的搜尋的方法。
運作方式如下:
若要在布爾模式下執行全文檢索搜尋,請在 AGAINST 運算式中包含 IN BOOLEAN MODE 修飾詞。回想一下,在上一篇文章中,我們在 Sakila 範例資料庫 的 film 資料表中加入了全文索引,以便可以在 description 欄位中執行全文檢索搜尋。以下例子傳回所有 description 欄位包含「Butler」一詞的電影:
一些更複雜的例子
上述的搜尋是非常簡單,不需要全文檢索搜尋。一旦要執行排除包含某些關鍵字的符合項目之類的操作,它將變得更加有趣。 例如,透過在字詞「Documentary」之前加上排除布爾運算子(-),我們可以找到描述中包含「Butler」一詞的非紀錄片電影:
這查詢將傳回 61 列,而之前的查詢為 73 列。
多字詞比對
我們還可以使用(+)包含運算字搜尋 description 與多個字詞符合的列。給字詞加上前置詞會告訴搜尋引擎只對應包含該字詞的列。當存在多個字詞(例如 +Butler Hunter Waitress)時,這將成為重要的區別。在這種情況下,將傳回其 description 包含字詞「Butler」以及其他兩個字詞之一的所有列:
將上面的結果與由「Butler」和「Hunter」兩個詞加上(+)包括運算字的查詢所產生的結果進行比較:
現在,符合的列必須同時包含「Butler」和「Hunter」,但不一定包含「Waitress」。
相關性次序的簡介
全文檢索搜尋對 InnoDB 的次序結果與對 MyISAM 的次序結果不同,因為 InnoDB 全文檢索搜尋是以 Sphinx 全文檢索搜尋引擎建模,並且所使用的演算是以 BM25 和 TF-IDF 次序演算法為基礎。
一些運算子會影響次序,因此我們可以進一步調整結果。例如,我們可以搜尋包含字詞「Butler」的列,而如果包含字詞「Hunter」或「Waitress」的列則排在下面:
總結
在今天的文章中,我們學習了如何使用 Navicat for MySQL 執行布爾全文檢索搜尋。有興趣進一步了解 Navicat for MySQL 嗎?你可以免費試用 14 天!
若要有關布爾全文檢索運算子的完整清單,請查看官方的 MySQL 文件。