首頁  >  文章  >  資料庫  >  mysql布爾文字搜尋教程

mysql布爾文字搜尋教程

巴扎黑
巴扎黑原創
2017-05-12 14:18:501799瀏覽

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);

輸出:

mysql布爾文字搜尋教程

分析:此全文本搜尋會擷取包含字詞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);

輸出:

mysql布爾文字搜尋教程

分析:這次只回傳一行。這次仍然匹配詞 heavy ,但 -rope* 明確地指示MySQL排除包含 rope* (任何以 rope 開始的詞,包括ropes )的行,這就是為什麼上一個例子中的第一行被排除的原因。

在MySQL 4.x中所需的程式碼變更 如果你使用的是MySQL4.x,則上面的範例可能不會傳回任何行。這是 * 操作符處理中的一個錯誤。為在MySQL 4.x中使用這個例子,使用 -ropes 而不是 -rope* (排除 ropes 而不是排除任何以 rope 開始的詞)。

我們已經看到了兩個全文本搜尋布林操作符 - 和 * ,-排除一個詞,而 *是截斷操作符(可想像為用於詞尾的一個通配符)。下表列出支援的所有布林操作符。

mysql布爾文字搜尋教程

以下舉幾個例子,說明某些運算子如何使用:

#輸入:

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(&#39;>rabbit <bcarrot&#39; in boolean mode);

分析:配對 rabbit 和 carrot ,增加前者的等級,降低後者的等級。

輸入:

select note_text from productnotes where match(note_text) agains(&#39;+safe +(<combination)&#39; in boolean mode);

分析:這個搜尋匹配詞 safe 和 combination ,降低後者的等級。

排列而不排序 在布林方式中,不依等級值降序排序回傳的行。

以上是mysql布爾文字搜尋教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn