利用IN BOOLEAN MODE修改程序, MySQL數(shù)據(jù)庫 也可以執(zhí)行布爾全文搜索:
mysql> SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
+----+-----------------------+-------------------------------------+
| id | title | body |
+----+-----------------------+-------------------------------------+
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
| 2 | How To Use MySQL Well | After you went through a ... |
| 3 | Optimizing MySQL | In this tutorial we will show ... |
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
| 6 | MySQL Security | When configured properly, MySQL ... |
+----+-----------------------+-------------------------------------+
這個問詢檢索所有包含單詞“MySQL”的行,但不檢索包含單詞“YourSQL”的行。
布爾全文搜索具有以下特點:
◆ 它們不使用 50% 域值。.
◆ 它們不會按照相關(guān)性漸弱的順序?qū)⑿羞M(jìn)行分類。你可以從上述問詢結(jié)果中看到這一點:相關(guān)性最高的行是一個包含兩個“MySQL” 的行,但它被列在最后的位置,而不是開頭位置。
◆ 即使沒有FULLTEXT,它們?nèi)匀豢梢怨ぷ,盡管這種方式的搜索執(zhí)行的速度非常之慢。
◆ 最小單詞長度全文參數(shù)和最大單詞長度全文參數(shù)均適用。
◆ 停止字適用。
布爾全文搜索的性能支持以下操作符:
◆ +
一個前導(dǎo)的加號表示該單詞必須 出現(xiàn)在返回的每一行的開頭位置。
◆ -
一個前導(dǎo)的減號表示該單詞一定不能出現(xiàn)在任何返回的行中。
◆ (無操作符)
在默認(rèn)狀態(tài)下(當(dāng)沒有指定 + 或–的情況下),該單詞可有可無,但含有該單詞的行等級較高。這和MATCH() ... AGAINST()不使用IN BOOLEAN MODE修改程序時的運作很類似。
◆ > <
這兩個操作符用來改變一個單詞對賦予某一行的相關(guān)值的影響。 > 操作符增強其影響,而 <操作符則減弱其影響。請參見下面的例子。
◆ ( )
括號用來將單詞分成子表達(dá)式。括入括號的部分可以被嵌套。
◆ ~
一個前導(dǎo)的代字號用作否定符, 用來否定單詞對該行相關(guān)性的影響。 這對于標(biāo)記“noise(無用信息)”的單詞很有用。包含這類單詞的行較其它行等級低,但因其可能會和-號同時使用,因而不會在任何時候都派出所有無用信息行。
◆ *
星號用作截斷符。于其它符號不同的是,它應(yīng)當(dāng)被追加到要截斷的詞上。
◆ "
一個被括入雙引號的短語 (‘"’) 只和字面上包含該短語輸入格式的行進(jìn)行匹配。全文引擎將短語拆分成單詞,在FULLTEXT索引中搜索該單詞。非單詞字符不需要嚴(yán)密的匹配:短語搜索只要求符合搜索短語包含的單詞且單詞的排列順序相同的內(nèi)容。例如,"test phrase" 符合 "test, phrase"。
若索引中不存在該短語包含的單詞,則結(jié)果為空。例如,若所有單詞都是禁用詞,或是長度都小于編入索引單詞的最小長度,則結(jié)果為空。
以下例子展示了一些使用布爾全文符號的搜索字符串:
◆ 'apple banana'
尋找包含至少兩個單詞中的一個的行。
◆ '+apple +juice'
尋找兩個單詞都包含的行。
◆ '+apple macintosh'
尋找包含單詞“apple”的行,若這些行也包含單詞“macintosh”, 則列為更高等級。
◆ '+apple -macintosh'
尋找包含單詞“apple” 但不包含單詞 “macintosh”的行。
◆ '+apple +(>turnover
尋找包含單詞“apple”和“turnover” 的行,或包含“apple” 和“strudel”的行 (無先后順序),然而包含 “apple turnover”的行較包含“apple strudel”的行排列等級更為高。
◆ 'apple*'
尋找包含“apple”、“apples”、“applesauce”或“applet”的行。
◆ '"some words"'
尋找包含原短語“some words”的行 (例如,包含“some words of wisdom” 的行,而非包含 “some noise words”的行)。注意包圍詞組的‘"’符號是界定短語的操作符字符。它們不是包圍搜索字符串本身的引號。