MySQL支援全文本搜尋的另一種形式,稱為布林方式(booleanmode)。以布林方式,可以提供關於如下內容的細節:
要匹配的詞;
1.要排斥的詞(如果某行包含這個詞,則不回傳該行,即使它包含其他指定的詞也是如此);
2.排列提示(指定某些詞比其他詞更重要,更重要的詞等級更高);
#3 .表達式分組;
4.另外一些內容。
即使沒有 FULLTEXT 索引也可以使用 布林方式不同於迄今為止使用的全文本搜尋語法的地方在於,即使沒有定義FULLTEXT 索引,也可以使用它。但這是一種非常緩慢的操作(其效能將隨著資料量的增加而降低)。
為示範IN BOOLEAN MODE 的作用,舉一個簡單的例子:
#輸入:
select note_text from productnotes where match(note_text) against('anvils' in boolean mode);
輸出:
分析:此全文本搜尋會擷取包含字詞heavy 的所有行(有兩行)。其中使用了關鍵字 IN BOOLEAN MODE ,但實際上沒有指定布林操作符,因此,其結果與沒有指定布林方式的結果相同。
IN BOOLEAN MODE 的行為差異 雖然這個例子的結果與沒有IN BOOLEAN MODE 的相同,但其行為有一個重要的差別(即使在這個特殊的例子沒有表現出來)。
為了符合包含heavy 但不包含任意以rope 開始的字的行,可使用下列查詢:
輸入:
select note_text from productnotes where match(note_text) against('heavy -rope' in boolean mode);
輸出:
分析:這次只回傳一行。這次仍然匹配詞 heavy ,但 -rope* 明確地指示MySQL排除包含 rope* (任何以 rope 開始的詞,包括ropes )的行,這就是為什麼上一個例子中的第一行被排除的原因。
在MySQL 4.x中所需的程式碼變更 如果你使用的是MySQL4.x,則上面的範例可能不會傳回任何行。這是 * 操作符處理中的一個錯誤。為在MySQL 4.x中使用這個例子,使用 -ropes 而不是 -rope* (排除 ropes 而不是排除任何以 rope 開始的詞)。
我們已經看到了兩個全文本搜尋布林操作符 - 和 * ,-排除一個詞,而 *是截斷操作符(可想像為用於詞尾的一個通配符)。下表列出支援的所有布林操作符。
以下舉幾個例子,說明某些運算子如何使用:
#輸入:
select note_text from productnotes where match(note_text) against('+rabbit +bait' in boolean mode);
分析:這個搜尋符合包含詞rabbit 和bait 的行。
輸入:
select note_text from productnotes where match(note_text) agains('rabbit bait' in boolean mode);
分析:沒有指定操作符,這個搜尋符合包含 rabbit 和 bait 中的至少一個字的行。
輸入:
select note_text from productnotes where match(note_text) agains('"rabbit bait"' in boolean mode);
分析:這個搜尋符合短語 rabbit bait 而不是匹配兩個字 rabbit 和bait 。
輸入:
select note_text from productnotes where match(note_text) agains('>rabbit <bcarrot' in boolean mode);
分析:配對 rabbit 和 carrot ,增加前者的等級,降低後者的等級。
輸入:
select note_text from productnotes where match(note_text) agains('+safe +(<combination)' in boolean mode);
分析:這個搜尋匹配詞 safe 和 combination ,降低後者的等級。
排列而不排序 在布林方式中,不依等級值降序排序回傳的行。
以上是mysql布爾文字搜尋教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!