- 理解全文本搜索
- 使用全文本搜索
- FULLTEXT(note_text)啓用全文本搜索支持:一般在創建表時啓用全文本搜索。CREATE TABLE接受FULLTEXT字句,它給出被索引列的一個逗號分隔的列表。
create table 表名{主鍵,字段1 類型爲text,fulltext(字段1)engine=myisam}
create table product{
id int not null primary key,
c1 text,
c2 text,....
fulltext(c1,c2....) engine myisam
}
- match(查詢的列) against(‘匹配的內容‘’)進行全文本搜索
注意:使用全文本搜索時,查詢結果排序:返回以文本匹配的良好程度排序的數據(匹配度高的,匹配位置靠前的數據排在前面)
select c1 from product where match(c1) against('note')
查找產品表中,c1列中匹配“note”字符串的數據
- match() against(’’ with query expensor)使用查詢擴展:MySQL對數據和索引進行兩遍掃描來完成搜索。
1.首先進行一個基本的全文本搜索,找出與搜索條件匹配的所有行。
2.然後,MySQL檢查這些匹配行並選擇所有有用的詞。
3.最後,MySQL再次進行全文本搜索,這次不僅使用原來的條件,而且還使用有用的詞。
利用查詢擴展,能找出所有可能相關的結果,即時它們並不精確包含所有查找的詞,增大檢索返回結果
select C1 from product where match(c1) against('note' with query expansion)
查詢結果中不僅含有匹配note的數據,還可以查到匹配到:含有note的結果中其他內容的數據
-in boolean mode 布爾文本搜索
- 布爾操作符說明
+ 包含,詞必須存在
- 排除,詞必須不出現
> 包含,而且增加等級值
< 包含,且減少等級值
() 把詞組成子表達式(允許這些子表達式作爲一個組被包含、排除、排列等)
~ 取消一個詞的牌謔值
* 詞尾的通配符
“” 定義一個短語(與單個詞的列表不一樣,它匹配整個短語以便包含或排除這個短語)
match() against('內容1' in boolean mode)——查詢符合內容的數據
match() against('內容1 -內容2' in boolean mode)——查詢匹配內容1,但是不包含內容2
match() against('內容1 +內容2' in boolean mode)——查詢匹配內容1,而且必須包含內容2
match() against('+內容1 -內容2' in boolean mode)——查詢必須匹配內容1,而且不包含內容2
match() against('內容1 內容2' in boolean mode)——查詢符合或者匹配內容1,或者匹配內容2
match() against('"內容1 內容2 "' in boolean mode)——查詢符合匹配“內容1 內容2”
match() against('<內容1 >內容2 "' in boolean mode)——查詢符合匹配內容1或者 內容2,且增加內容2的等級,降低內容1的等級
- 全文本搜索的使用說明
1、當匹配短詞(含有三個或者三個一下字符的詞),匹配時容易被忽略,從索引中刪除
2、50%規則:如果一個詞在50%以上的行數中出現,則將他忽略(50%規則不適用於in boolean mode)
3、如果表中行數小於3行,那麼全文檢索將不會返回結果
4、全文本搜索會忽略單引號’
5、全文本檢索默認不區分大小寫(可以使用binary來實現區分大小寫功能)
6、全文本檢索速度快,儘量使用全文本檢索,少使用like