mysql全文本搜尋使用教學課程

巴扎黑
發布: 2017-05-12 14:18:40
原創
1638 人瀏覽過

在索引之後,使用兩個函數 Match() 和 Against() 執行全文本搜索,其中 Match() 指定被搜尋的列, Against() 指定要使用的搜尋表達式。

以下舉例:

輸入:

select note_text from productnotes where match(note_text) against('rabbit');
登入後複製

#輸出:

mysql全文本搜尋使用教學課程

分析:此SELECT語句檢索單一列note_text 。由於 WHERE 子句,一個全文本搜尋被執行。 Match(note_text) 指示MySQL針對指定的欄位進行搜索, Against('rabbit') 指定字詞 rabbit 作為搜尋文字。由於有兩行包含詞 rabbit ,這兩個行被傳回。

使用完整的 Match() 說明 傳遞給 Match() 的值必須與FULLTEXT() 定義中的相同。如果指定多個列,則必須列出它們(而且次序正確)。

搜尋不區分大小寫 除非使用 BINARY 方式,否則全文本搜尋不區分大小寫。

事實是剛才的搜尋可以簡單地用LIKE 子句完成,如下所示:

輸入:

select note_text from productnotes where note_text like '%rabbit';
登入後複製

輸出:

mysql全文本搜尋使用教學課程

分析:這個SELECT 語句同樣檢索出兩行,但次序不同(雖然不總是出現這種情況)。

上述兩個 SELECT 語句都不包含 ORDER BY 子句。後者(使用 LIKE )以不特別有用的順序傳回資料。前者(使用全文本搜尋)傳回以文字比對的良好程度排序的資料。兩個行都包含字 rabbit ,但包含字 rabbit 作為第3個字的行的等級比作為第20個字的行高。這很重要。全文本搜尋的一個重要部分就是對結果進行排序。具有較高等級的行先返回(因為這些行很可能是你真正想要的行)。

為示範排序如何運作,請看以下範例:

#輸入:

select note_text match(note_text) against('rabbit') as rank from productnotes;
登入後複製

輸出:

mysql全文本搜尋使用教學課程

mysql全文本搜尋使用教學課程

#分析:這裡,在SELECT 而不是WHERE 子句中使用Match() 和Against() 。這使所有行都被傳回(因為沒有 WHERE 子句)。 Match() 和 Against()用來建立一個計算列(別名為 rank ),此列包含全文本搜尋計算出的等級值。等級由MySQL根據行中詞的數目、唯一詞的數目、整個索引中詞的

總數以及包含該詞的行的數目計算出來。如所見,不包含單字 rabbit 的行等級為0(因此不被前一範例中的 WHERE 子句選擇)。確實包含詞 rabbit的兩個行每行都有一個等級值,文本中詞靠前的行的等級值比詞靠後的行的等級值高。

這個範例有助於說明全文本搜尋如何排除行(排除那些等級為0的行),如何排序結果(依等級以降序排序)。

排序多個搜尋項 如果指定多個搜尋項,則包含多數匹配詞的那些行將具有比包含較少詞(或僅有一個匹配)的那些行高的等級值。

###如所見,全文本搜尋提供了簡單 LIKE 搜尋無法提供的功能。而且,由於資料是索引的,全文本搜尋還相當快。 ###

以上是mysql全文本搜尋使用教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!