MySQL的全文本搜尋

2021-08-30 10:00:28 字數 2817 閱讀 4511

我們在使用mysql時,一般會用到兩種引擎--myisam和innodb,myisam支援全文本搜尋,但不支援事務處理;而innodb支援事務處理,但不支援全文本搜尋。

一、有時,我們需要使用全文本搜尋,例如:要搜尋文字中存在指定的某個詞,且以這個詞出現的順序排序。

先建立支援全文本搜尋的表:

create table product_notes

(note_id int not null auto_increment,

note_date datetime not null,

note_text text null,

primary key(note_id),

fulltext(note_text)

) engine=myisam;

注意:要使用全文本搜尋,引擎一定要是myisam(engine=myisam)。

在note_text欄位定義了全文本搜尋功能後,mysql會自動為這列新增索引,並維護該索引。在增加,更新或刪除行時,索引隨之自動更新。

假設product_notes表中已經有了資料,現在我們來使用全文本查詢:

select note_text

from product_notes

where match(note_text) against('rabbit');

這條語句檢索出note_text欄位包含rabbit的行。類似於:

select note_text

from product_notes

where note_text like '%rabbit%';

兩者的區別在於使用like查詢僅僅只返回包含『rabbit』的行,而使用全文本會按'rabbit'在文字中出現的順序排序,這是like所做不到的。例如(假設note_text欄位存在下兩列包含rabbit的行):

1:a fat rabbit

2:a rabbit

用全文本搜尋出來就的排序就會這樣

2:a rabbit

1:a fat rabbit

因為2中的rabbit前面只有乙個詞,而1中的有兩個,所以2的優先順序高,自然排在前面。

可以檢視優先順序

select note_text

,match(note_text) against('rabbit') as rank

from product_notes

返回:note_text rank

1:a fat rabbit 1.6403435232543

2:a rabbit 1.5935389274914

3:a good day 0

4:to do it 0

二、使用查詢擴充套件

select note_text

from product_notes

where match(note_text) against('rabbit' with query expansion);

返回:2:a rabbit

1:a fat rabbit

3:a good day

因為3存在乙個a,所以也被查詢出來了。

三、布林文字搜尋

布林操作符 描述

+ 包含指定值

- 排除指定值

> 包含指定值,並且增加優先順序值

< 包含指定值,並且減少優先順序值

() 把詞組成表示式

~ 取消乙個詞的排序值

* 詞尾的萬用字元

"" 定義乙個短語

下面給出一些例子:

select note_text

from product_notes

where match(note_text) against('+rabbit +fat' in boolean mode);

返回:2:a fat rabbit

文字包含rabbit和fat的行

select note_text

from product_notes

where match(note_text) against('rabbit -fat' in boolean mode);

返回:2:a rabbit

排除文字中存在fat的行。

select note_text

from product_notes

where match(note_text) against('rabbit good' in boolean mode);

返回:2:a rabbit

1:a fat rabbit

3:a good day

沒有指定操作符,搜尋包含rabbit或good的行。

select note_text

from product_notes

where match(note_text) against('"fat rabbit"' in boolean mode);

返回:2:a fat rabbit

文字包含"fat rabbit"的行。

select note_text

from product_notes

where match(note_text) against('+fat +(>rabbit)' in boolean mode);

返回:2:a fat rabbit

文字包含fat和rabbit的行,且減少後者的優先順序值。

四、全文本搜尋使用說明

1、指定值出現在行中的頻率少於50%

2、忽略mysql的內建非用詞(stopword)

3、忽略單引號,如:fa't 搜尋為fat

4、不具有詞分隔符的語言(如:日語和漢語)不能恰當地返回全文本搜尋結果

5、引擎必須是myisam型別

mysql在全文本 MYSQL全文本搜尋

全文本搜尋 使用全文本搜尋 啟用全文本搜尋 進行全文本搜尋 使用拓展查詢 布林文字搜尋 使用全文本搜尋 為了進行全文本搜尋,必須索引被搜尋的列,而且要隨著資料的改變不斷的重新索引。對表列進行適當的改進後,mysql會自動進行所有的索引和重新索引。優點 效能快 明確控制 智慧型化的結果 啟用全文本搜尋...

MYSQL全文本搜尋

為了進行全文本搜尋,必須索引被搜尋的列,而且要隨著資料的改變不斷的重新索引。對表列進行適當的改進後,mysql會自動進行所有的索引和重新索引。優點 效能快明確控制 智慧型化的結果 fulltext 列名 mysql對該列索引自動更新 使用match 被搜尋的列 against 指定要使用的搜尋表示式...

MySQL使用全文本搜尋

1.理解全文本搜尋 mysql資料庫支援幾種基本的資料庫引擎中,並不是所有的引擎都支援本文所描述的全文本搜尋。在兩種最常用的引擎myisam和innodb中,只有前者支援全文本搜尋,而後者不支援。所以如果需要對錶進行全文本搜尋,則需要把該錶的引擎設定為myisam。全文本搜尋有比like匹配和正規表...