[My SQL] 全文本搜索

全文本搜索不同於通配符和正則表達式搜索,它使用索引進行搜索,相比於前兩者更高效,結果更加智能。

之前已經瞭解過,對於最常見的兩種引擎MyISAM和InnoDB來說,前者支持全文本搜索,而後者不支持。


爲了支持全文本搜索,必須定義被索引的列。一般在創建表時啓用全文本搜索

我們假設要創建一個productnotes的表:


在這張表的定義中,我們使用FULLTEXT(note_text)定義了被索引的列爲note_text,注意引擎一定要選擇支持全文本操作的MyISAM。

表的內容如下:


定義了全文本搜索之後,無論後續表會進行插入、更新或者刪除,note_text這一列都會進行自動的索引。

在建立索引之後,使用Match()和Aganist()來進行全文本搜索,Match()指定被搜索的列,Aganist()指定要搜索的表達式。

如我們要索引note_text列包含rabbit的行:


結果返回了包含rabbit的兩行數據,並且是有序輸出。

傳遞給Match的值必須是定義的索引列,且全文本搜索是不區分大小寫的,使用rabbit也可以搜索到RAbbit。

使用查詢擴展

查詢擴展可以搜索到更多的行,甚至這些行不包含rabbit。


可以看到使用了WITH QUERY EXPANSION的全文本搜索,輸出了6行數據,首先前兩行是包含rabbit的行,其他都是包含了前兩行中其他詞的行。

布爾文本搜索

全文本搜索的另一種方式是布爾文本搜索,常用的布爾操作符如下:


搜索包含rabbit和bait的行:


搜索包含rabbit bait這個短語的行:


搜索rabbit和carrot,增加前者等級,降低後者等級:



使用全文本搜索的幾個說明:

50%規則:如果表的行數少於三行,則全文本搜索不返回結果;

單引號:忽略詞中的單引號,don't的索引爲dont;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章