全文本搜索

理解全文本搜索

  • 比LIKE、正則表達式更智能,不會因數據量增大損失性能。

並非所有引擎都支撐全文本

  • 最常用的兩個引擎MyISAM和InnoDB,前者支撐全文本搜索,而後者不支持。

使用全文本搜索

  爲進行全文本搜索,必須索引被搜索的列,而且要隨着數據的改變不斷地重新索引。對錶列進行適當設計後,MySQL會自動進行所有的索引和重新索引。
  在索引之後,SELECT可與Match()和Against()一起使用以實際執行搜索。

啓用全文本搜索支持

CREATE TABLE productnotes(
    note_id int NOT NULL AUTO_INCREMENT,
    prod_id char(10) NOT NULL,
    note_date datetime NOT NULL,
    note_text text NULL,
    PRIMARY KEY(note_id),
    FULLTEXT(note_text)  #此處是全文本搜索
)ENGINE=MyISAM  #更換爲MyISAM引擎
  • Match()內的值必須與FULLTEXT()定義中的相同,如果指定多個列,則必須順序正確的列出它們。
  • 爲進行全文本搜索,MySQL根據FULLTEXT(…)的指示對它進行索引,()中可以索引單個列,也可以多個。
  • FULLTEXT(…)儘量在create table 表名(…)中的最後面。

布爾文本搜索(沒FULLTEXT也可用)

  • 要匹配的詞
  • 要排斥的詞
  • 排列提示(某詞比某詞更重要,更重要的詞等級更高)
  • 表達式分組
    例如:
SELECT note_text FROM productnotes
WHERE Match(note_text)
Against('heavy -rope*' IN BOOLEAN MODE);
\#意思是匹配詞heavy,但排除包含rope的詞或者行  
布爾文本操作符 描述
+ 包含,詞必須存在
- 排斥,詞必須不存在
> 包含,且增加等級
< 包含,且減少等級
( ) 把詞組成子表達式
~ 取消一個詞的排序值
* 詞尾的通配符
“” 定義一個短語

注意!

  • 不要在導入數據時使用FULLTEXT:更新索引花時間,如果正在導入數據到一個新表,則不該此時啓用FULLTEXT索引。應首先導入數據,然後修改表,定義FULLTEXT。
  • 如果一個詞的頻率出現超過50%則忽略,不用於布爾文本搜索。
發佈了58 篇原創文章 · 獲贊 25 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章