最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

什么是全文索引

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

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

注意

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

創(chuàng)建全文索引

  • 創(chuàng)建表的時(shí)候創(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)建了一個(gè)給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 | 弘揚(yáng)正能量      | 貫徹黨的18大精神        |
+----+-----------------+-------------------------+
1 row in set (0.00 sec)

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

BOOLEAN MODE

這個(gè)模式和lucene中的BooleanQuery很像,可以通過一些操作符,來指定搜索詞在結(jié)果中的包含情況.比如 + 表示必須包含 , -表示必須不包含,默認(rèn)為誤操作符,代表可以出現(xiàn)可以不出現(xiàn),但是出現(xiàn)時(shí)在查詢結(jié)果集中的排名較高一些.也就是該結(jié)果和搜索詞的相關(guā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 | 弘揚(yáng)正能量      | 貫徹黨的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)
當(dāng)搜索必須命中精神時(shí),命中了一條數(shù)據(jù),當(dāng)在加上不能包含貫徹的時(shí)候,無命中結(jié)果.

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

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

注:如果可能,請盡量先創(chuàng)建表并插入所有數(shù)據(jù)后再創(chuàng)建全文索引,而不要在創(chuàng)建表時(shí)就直接創(chuàng)建全文索引,因?yàn)榍罢弑群笳叩娜乃饕室摺?/p>

總結(jié)

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

相關(guān)文章

  • mysql count提高方法總結(jié)

    mysql count提高方法總結(jié)

    在本文里小編給大家分享了關(guān)于mysql count提高方法和具體步驟,需要的朋友們跟著學(xué)習(xí)參考下。
    2019-03-03
  • MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫壓力

    MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫壓力

    這篇文章主要為大家介紹了MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫壓力的技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL文件權(quán)限存在的安全問題和解決方案

    MySQL文件權(quán)限存在的安全問題和解決方案

    MySQL文件權(quán)限是用來控制用戶對數(shù)據(jù)庫文件以及目錄的操作權(quán)限,在MySQL中,這些權(quán)限通常由系統(tǒng)管理員分配,通過GRANT和REVOKE語句進(jìn)行管理,本文給大家介紹了MySQL文件權(quán)限存在的安全問題和解決方案,需要的朋友可以參考下
    2024-07-07
  • mysql排名的三種常見方式

    mysql排名的三種常見方式

    這篇文章主要介紹了mysql排名的三種常見方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Mysql大表修改字段兩種解決方式

    Mysql大表修改字段兩種解決方式

    這篇文章主要給大家介紹了關(guān)于Mysql大表修改字段的兩種解決方式,文中介紹了在處理平臺(tái)幣訂單表字段類型修改時(shí)遇到的問題及解決方案,需要的朋友可以參考下
    2024-11-11
  • MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例

    MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例

    這篇文章主要給大家介紹了關(guān)于MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法,在MySQL中可以使用聚合函數(shù)與GROUP BY語句可以對數(shù)據(jù)進(jìn)行分組并進(jìn)行聚合計(jì)算,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • MySQL常用SQL語句總結(jié)包含復(fù)雜SQL查詢

    MySQL常用SQL語句總結(jié)包含復(fù)雜SQL查詢

    今天小編就為大家分享一篇關(guān)于MySQL常用SQL語句總結(jié)包含復(fù)雜SQL查詢,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 使用Canal和Kafka解決MySQL與緩存的數(shù)據(jù)一致性問題

    使用Canal和Kafka解決MySQL與緩存的數(shù)據(jù)一致性問題

    這篇文章主要介紹了使用Canal和Kafka解決MySQL與緩存的數(shù)據(jù)一致性問題,文中通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • 在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法

    在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法

    這篇文章主要介紹了在Linux系統(tǒng)的命令行中為MySQL創(chuàng)建用戶的方法,包括對所建用戶的權(quán)限管理,需要的朋友可以參考下
    2015-06-06
  • mysql表格id清零的三種方法

    mysql表格id清零的三種方法

    本文主要介紹了mysql表格id清零的三種方法,主要包括TRUNCATE TABLE語句,ALTER TABLE語句和DELETE語句,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評論

惠水县| 白山市| 镇远县| 湘阴县| 九寨沟县| 龙川县| 北碚区| 永清县| 汝南县| 四川省| 太白县| 临沭县| 长沙县| 泽州县| 长春市| 潜江市| 新沂市| 门头沟区| 甘洛县| 黄龙县| 泽普县| 崇州市| 屏东市| 江阴市| 炉霍县| 新建县| 颍上县| 兰州市| 双柏县| 从江县| 房产| 祁阳县| 耿马| 天台县| 德化县| 乌审旗| 东乡县| 蒙城县| 湖口县| 阜阳市| 建始县|