欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql使用全文索引(FullText?index)的實例代碼

 更新時間:2022年04月02日 10:27:27   作者:程序猿小哈  
使用索引時數(shù)據(jù)庫性能優(yōu)化的必備技能之一,下面這篇文章主要給大家介紹了關于Mysql使用全文索引(FullText?index)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

什么是全文索引

全文索引,通過建立倒排索引,可以極大的提升檢索效率,解決判斷字段是否包含的問題. 例如: 有title字段,需要查詢所有包含 "政府"的記錄. 需要 like "%政府%"方式查詢,查詢速度慢,當查詢包含"政府" OR "中國"的需要是,sql難以簡單滿足.全文索引就可以實現(xiàn)這個功能.

倒排索引(英語:Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結構。

注意

在MySQL 5.6版本以前,只有MyISAM存儲引擎支持全文引擎.在5.6版本中,InnoDB加入了對全文索引的支持,但是不支持中文全文索引.在5.7.6版本,MySQL內置了ngram全文解析器,用來支持亞洲語種的分詞.

創(chuàng)建全文索引

  • 創(chuàng)建表的時候創(chuàng)建
CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR (200),
    body TEXT,
    FULLTEXT (title, body) WITH PARSER ngram
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';

創(chuàng)建了一個給title和body字段添加全文縮影的表

  • 給字段添加全文索引 ALTER TABLE articles ADD FULLTEXT INDEX title_body_index (title,body) WITH PARSER ngram;

使用全文索引

MySQL的全文索引查詢有多種模式

自然語言搜索

普通的判斷是否包含

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('精神' IN NATURAL LANGUAGE MODE);
+----+-----------------+-------------------------+
| id | title           | body                    |
+----+-----------------+-------------------------+
|  1 | 弘揚正能量      | 貫徹黨的18大精神        |
+----+-----------------+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('精神');
+----+-----------------+-------------------------+
| id | title           | body                    |
+----+-----------------+-------------------------+
|  1 | 弘揚正能量      | 貫徹黨的18大精神        |
+----+-----------------+-------------------------+
1 row in set (0.00 sec)
可以看到,搜索結果命中了一條,且在不指定搜索模式的情況下,默認模式為自然語言搜索.

BOOLEAN MODE

這個模式和lucene中的BooleanQuery很像,可以通過一些操作符,來指定搜索詞在結果中的包含情況.比如 + 表示必須包含 , -表示必須不包含,默認為誤操作符,代表可以出現(xiàn)可以不出現(xiàn),但是出現(xiàn)時在查詢結果集中的排名較高一些.也就是該結果和搜索詞的相關性高一些.

具體包含的所有操作符可以通過MySQL查詢來查看:

show variables like '%ft_boolean_syntax%'

+-------------------+----------------+
| Variable_name     | Value          |
+-------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
+-------------------+----------------+
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+精神' IN BOOLEAN MODE);
+----+-----------------+-------------------------+
| id | title           | body                    |
+----+-----------------+-------------------------+
|  1 | 弘揚正能量      | 貫徹黨的18大精神        |
+----+-----------------+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+精神 -貫徹' IN BOOLEAN MODE);
Empty set (0.01 sec)
當搜索必須命中精神時,命中了一條數(shù)據(jù),當在加上不能包含貫徹的時候,無命中結果.

強烈注意:MySql自帶的全文索引只能用于數(shù)據(jù)庫引擎為MYISAM的數(shù)據(jù)表,如果是其他數(shù)據(jù)引擎,則全文索引不會生效。此外,MySql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。如果需要對包含中文在內的文本數(shù)據(jù)進行全文檢索,我們需要采用Sphinx(斯芬克斯)/Coreseek技術來處理中文。

注:目前,使用MySql自帶的全文索引時,如果查詢字符串的長度過短將無法得到期望的搜索結果。MySql全文索引所能找到的詞默認最小長度為4個字符。另外,如果查詢的字符串包含停止詞,那么該停止詞將會被忽略。

注:如果可能,請盡量先創(chuàng)建表并插入所有數(shù)據(jù)后再創(chuàng)建全文索引,而不要在創(chuàng)建表時就直接創(chuàng)建全文索引,因為前者比后者的全文索引效率要高。

總結

到此這篇關于Mysql使用全文索引(FullText index)的文章就介紹到這了,更多相關Mysql使用全文索引內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql模糊查詢like與REGEXP的使用詳細介紹

    mysql模糊查詢like與REGEXP的使用詳細介紹

    每位程序員們應該都知道,增刪改查是mysql最基本的功能,而其中查是最頻繁的操作,模糊查找是查詢中非常常見的操作,于是模糊查找成了必修課。下面這篇文章就給大家詳細介紹了mysql模糊查詢like與REGEXP的使用,有需要的朋友們可以參考學習。
    2016-12-12
  • MySQL索引原理詳解

    MySQL索引原理詳解

    這篇文章主要介紹了MySQL索引原理詳解,索引是幫助MySQL高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結構,最重要的點是有序的,我們用索引就是為了快速的查找數(shù)據(jù),如果一堆數(shù)據(jù)是無序的,程序只能挨個遍歷每個元素
    2022-08-08
  • MySQL學習筆記小結

    MySQL學習筆記小結

    這篇文章主要介紹了MySQL學習筆記小結,整體介紹了mysql的很多細節(jié)我呢體,學習優(yōu)化mysql的朋友可以參考下,需要的朋友可以參考下
    2016-05-05
  • MySQL使用正則表達式來更好地控制數(shù)據(jù)過濾

    MySQL使用正則表達式來更好地控制數(shù)據(jù)過濾

    MySQL中的正則表達式是一種強大的數(shù)據(jù)過濾工具,它允許用戶以靈活的方式匹配和搜索文本數(shù)據(jù),這篇文章主要給大家介紹了關于MySQL使用正則表達式來更好地控制數(shù)據(jù)過濾的相關資料,需要的朋友可以參考下
    2024-08-08
  • MySQL修改tmpdir參數(shù)

    MySQL修改tmpdir參數(shù)

    本文給大家分享的是在linux系統(tǒng)下MySQL修改tmpdir參數(shù)解決tmpdir報錯的問題,有相同需求的小伙伴可以參考下
    2016-02-02
  • MYSQL where 1=1判定中的作用說明

    MYSQL where 1=1判定中的作用說明

    最近看到很多sql里用到where 1=1,原來覺得這沒用嘛,但是又想到如果沒用為什么要寫呢?
    2011-09-09
  • 簡單了解MySQL存儲引擎

    簡單了解MySQL存儲引擎

    這篇文章主要介紹了MySQL存儲引擎的相關資料,為開發(fā)時選擇合適的存儲引擎提供參考,感興趣的朋友可以了解下
    2020-07-07
  • centOS下mysql workbench安裝配置教程

    centOS下mysql workbench安裝配置教程

    這篇文章主要為大家詳細介紹了centOS下mysql workbench安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Mysql高性能優(yōu)化技能總結

    Mysql高性能優(yōu)化技能總結

    這篇文章主要介紹了Mysql高性能優(yōu)化技能總結的相關資料,需要的朋友可以參考下
    2020-02-02
  • MySql增加用戶、授權、修改密碼等語句

    MySql增加用戶、授權、修改密碼等語句

    MySql 新建用戶,新建數(shù)據(jù)庫,用戶授權,刪除用戶,修改密碼
    2008-09-09

最新評論