top
Loading...
12.7.1.布爾全文搜索
12.7.1. 布爾全文搜索

利用IN BOOLEAN MODE修改程序, MySQL 也可以執行布爾全文搜索:

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% 域值。.
  • 它們不會按照相關性漸弱的順序將行進行分類。你可以從上述問詢結果中看到這一點:相關性最高的行是一個包含兩個“MySQL” 的行,但它被列在最后的位置,而不是開頭位置。
  • 即使沒有FULLTEXT,它們仍然可以工作,盡管這種方式的搜索執行的速度非常之慢。
  • 最小單詞長度全文參數和最大單詞長度全文參數均適用。
  • 停止字適用。

布爾全文搜索的性能支持以下操作符: 

  • +

一個前導的加號表示該單詞必須 出現在返回的每一行的開頭位置。

  • -

一個前導的減號表示該單詞一定不能出現在任何返回的行中。

  • (無操作符)

在默認狀態下(當沒有指定 + 或–的情況下),該單詞可有可無,但含有該單詞的行等級較高。這和MATCH() ... AGAINST()不使用IN BOOLEAN MODE修改程序時的運作很類似。  

  • > <

這兩個操作符用來改變一個單詞對賦予某一行的相關值的影響。 > 操作符增強其影響,而 <操作符則減弱其影響。請參見下面的例子。 

  • ( )

括號用來將單詞分成子表達式。括入括號的部分可以被嵌套。

  • ~

一個前導的代字號用作否定符, 用來否定單詞對該行相關性的影響。 這對于標記“noise(無用信息)”的單詞很有用。包含這類單詞的行較其它行等級低,但因其可能會和-號同時使用,因而不會在任何時候都派出所有無用信息行。

  • *

星號用作截斷符。于其它符號不同的是,它應當被追加到要截斷的詞上。

  • "

一個被括入雙引號的短語 (") 只和字面上包含該短語輸入格式的行進行匹配。全文引擎將短語拆分成單詞,在FULLTEXT索引中搜索該單詞。   非單詞字符不需要嚴密的匹配:短語搜索只要求符合搜索短語包含的單詞且單詞的排列順序相同的內容。例如, "test phrase" 符合 "test, phrase"

若索引中不存在該短語包含的單詞,則結果為空。例如,若所有單詞都是禁用詞,或是長度都小于編入索引單詞的最小長度,則結果為空。

以下例子展示了一些使用布爾全文符號的搜索字符串:

  • 'apple banana'

尋找包含至少兩個單詞中的一個的行。

  • '+apple +juice'

尋找兩個單詞都包含的行。

  • '+apple macintosh'

尋找包含單詞“apple”的行,若這些行也包含單詞“macintosh”, 則列為更高等級。

  • '+apple -macintosh'

尋找包含單詞“apple” 但不包含單詞 “macintosh”的行。

  • '+apple +(>turnover <strudel)'

尋找包含單詞“apple”和“turnover” 的行,或包含“apple” 和“strudel”的行 (無先后順序),然而包含 “apple turnover”的行較包含“apple strudel”的行排列等級更為高。

  • 'apple*'

尋找包含“apple”、“apples”、“applesauce”或“applet”的行。

  • '"some words"'

尋找包含原短語“some words”的行 (例如,包含“some words of wisdom” 的行,而非包含  some noise words”的行)。注意包圍詞組的‘"’ 符號是界定短語的操作符字符。它們不是包圍搜索字符串本身的引號。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/functions.html
北斗有巢氏 有巢氏北斗