數據庫學習筆記——全文本搜索

  • 理解全文本搜索
  • 使用全文本搜索
    • 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章