mysql 全文索引(fulltext)學習

2021-09-02 21:59:04 字數 1955 閱讀 6300

使用索引是資料庫效能優化的必備技能之一。在mysql資料庫中,[size=medium][b][color=red]有四種索引:聚集索引(主鍵索引)、普通索引、唯一索引以及我們這裡將要介紹的全文索引(fulltext index)。

[/color][/b][/size]

全文索引(也稱全文檢索)是目前搜尋引擎使用的一種關鍵技術。它能夠利用「分詞技術「等多種演算法智慧型分析出文字文字中關鍵字詞的頻率及重要性,然後按照一定的演算法規則智慧型地篩選出我們想要的搜尋結果。在這裡,我們就不追根究底其底層實現原理了,現在我們來看看在mysql中如何建立並使用全文索引。

在mysql中,建立全文索引相對比較簡單。例如,我們有乙個文章表(article),其中有主鍵id(id)、文章標題(title)、文章內容(content)三個字段。現在我們希望能夠在title和content兩個列上建立全文索引,article表及全文索引的建立sql語句如下:

--建立article表

create table article (

id int unsigned auto_increment not null primary key,

title varchar(200),

content text,

fulltext (title, content) --在title和content列上建立全文索引

);

上面就是在建立表的同時建立全文索引的sql示例。此外,如果我們想要給已經存在的表的指定字段建立全文索引,同樣以article表為例,我們可以使用如下sql語句進行建立:

--給現有的article表的title和content欄位建立全文索引

--索引名稱為fulltext_article

alter table article

add fulltext index fulltext_article (title, content)

在mysql中建立全文索引之後,現在就該了解如何使用了。眾所周知,在資料庫中進行模糊查詢是使用like關鍵字進行查詢,例如:

[b][color=blue]select * from article where content like '%查詢字串%'

那麼,我們使用全文索引也是這樣用的嗎?[/color][/b]

當然不是,我們必須使用特有的語法才能使用全文索引進行查詢。例如,我們想要在article表的title和content列中全文檢索指定的查詢字串,可以如下編寫sql語句:

select * from article where match(title, content) against('查詢字串')

[color=red][b]搜尋語法規則:[/b][/color]

> 提高該條匹配資料的權重值。

< 降低該條匹配資料的權重值。

~ 將其相關性由正轉負,表示擁有該字會降低相關性(但不像 - 將之排除),只是排在較後面權重值降低。

* 萬用字,不像其他語法放在前面,這個要接在字串後面。

" " 用雙引號將一段句子包起來表示要完全相符,不可拆字。

強烈注意:mysql自帶的全文索引只能用於資料庫引擎為myisam的資料表,如果是其他資料引擎,則全文索引不會生效。此外,mysql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。如果需要對包含中文在內的文字資料進行全文檢索,我們需要採用sphinx(斯芬克斯)/coreseek技術來處理中文。本站將會在後續文章中對sphinx以及coreseek進行介紹。

備註1:目前,使用mysql自帶的全文索引時,如果查詢字串的長度過短將無法得到期望的搜尋結果。mysql全文索引所能找到的詞的預設最小長度為4個字元。另外,如果查詢的字串包含停止詞,那麼該停止詞將會被忽略。

[b]備註2:如果可能,請盡量先建立表並插入所有資料後再建立全文索引,而不要在建立表時就直接建立全文索引,因為前者比後者的全文索引效率要高。[/b]

參考:[url]

mysql全文索引的坑 MySQL全文索引問題

我有乙個包含以下資料的 文章 mysql select from articles id title body 1 mysql tutorial dbms stands for database 2 how to use mysql well after you went through a 3 o...

mysql全文索引

了解 solr 之後 發現全文索引也能做檢索 故了解了下 筆記如下 建立全文索引 alter table table add fulltext index fulltext table 列1 列2 查詢方式 select from table where match 列1 列2 against 查詢...

mysql全文索引

舊版的mysql的全文索引只能用在myisam 的char varchar和text的字段上。不過新版的mysql5.6.24上innodb引擎也加入了全文索引,所以具體資訊要隨時關注官網,create table article id int auto increment not null pri...