我們在使用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匹配和正規表...