明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

mysql全文本搜索使用圖文說明教程

[摘要]在索引之后,使用兩個函數(shù) Match() 和 Against() 執(zhí)行全文本搜索,其中 Match() 指定被搜索的列, Against() 指定要使用的搜索表達(dá)式。下面舉一個例子:輸入:select note_text from productnotes where match(note_tex...
在索引之后,使用兩個函數(shù) Match() 和 Against() 執(zhí)行全文本搜索,其中 Match() 指定被搜索的列, Against() 指定要使用的搜索表達(dá)式。

下面舉一個例子:

輸入:

select note_text from productnotes where match(note_text) against('rabbit');

輸出:

QQ截圖20170512101926.png

分析:此 SELECT 語句檢索單個列 note_text 。由于 WHERE 子句,一個全文本搜索被執(zhí)行。 Match(note_text) 指示MySQL針對指定的列進(jìn)行搜索, Against('rabbit') 指定詞 rabbit 作為搜索文本。由于有兩行包含詞 rabbit ,這兩個行被返回。

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

搜索不區(qū)分大小寫 除非使用 BINARY 方式,否則全文本搜索不區(qū)分大小寫。

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

輸入:

select note_text from productnotes where note_text like '%rabbit';

輸出:

QQ截圖20170512102141.png

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

上述兩條 SELECT 語句都不包含 ORDER BY 子句。后者(使用 LIKE )以不特別有用的順序返回數(shù)據(jù)。前者(使用全文本搜索)返回以文本匹配的良好程度排序的數(shù)據(jù)。兩個行都包含詞 rabbit ,但包含詞 rabbit 作為第3個詞的行的等級比作為第20個詞的行高。這很重要。全文本搜索的一個重要部分就是對結(jié)果排序。具有較高等級的行先返回(因為這些行很可能是你真正想要的行)。

為演示排序如何工作,請看以下例子:

輸入:

select note_text match(note_text) against('rabbit') as rank from productnotes;

輸出:

QQ截圖20170512102604.png

QQ截圖20170512102612.png

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

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

這個例子有助于說明全文本搜索如何排除行(排除那些等級為0的行),如何排序結(jié)果(按等級以降序排序)。

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

正如所見,全文本搜索提供了簡單 LIKE 搜索不能提供的功能。而且,由于數(shù)據(jù)是索引的,全文本搜索還相當(dāng)快。

以上就是mysql全文本搜索使用教程的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。