mysql全文本搜索使用圖文說明教程
發(fā)表時間:2023-08-31 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在索引之后,使用兩個函數(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');
輸出:
分析:此 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';
輸出:
分析:這條 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;
輸出:
分析:這里,在 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知識。