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

MySQL 全文索引使用指南

 更新時間:2021年05月25日 09:47:01   作者:島上碼農(nóng)  
在 MySQL 中,我們經(jīng)常使用 WHERE 條件用于進(jìn)行值的相等比較、范圍過濾。然而,我們也會使用關(guān)鍵字進(jìn)行搜索,這個基于搜索值與其他值的相關(guān)性來進(jìn)行過濾。MySQL全文檢索即用于這種場景。本篇將介紹如何使用全文檢索。

全文索引需要特殊的查詢語法。有沒有索引都可以進(jìn)行全文檢索,但是存在索引時會提高匹配的速度。全文索引的索引通過特殊的結(jié)構(gòu)存儲以便于找到文檔中包含搜索關(guān)鍵字對應(yīng)的內(nèi)容。在我們?nèi)粘I钪校畛R姷娜臋z索就是網(wǎng)絡(luò)搜索引擎。雖然,網(wǎng)絡(luò)搜索引擎的數(shù)據(jù)里十分龐大,并且通常也不會使用關(guān)系型數(shù)據(jù)庫,但是原理是相似的。

全文索引支持通過基于字符(CHAR、VARCHAR 和 TEXT 類型的列)的檢索,也可以支持自然語言模式(Natural Language Mode, 默認(rèn))和布爾模式 (Boolean Mode)。例如我們搜索“數(shù)據(jù)庫引擎”的時候,內(nèi)容中包括“數(shù)據(jù)庫”、“引擎”和“數(shù)據(jù)庫引擎”的內(nèi)容都會檢索出來。全文索引的實現(xiàn)有大量的限制,而且十分復(fù)雜。但是由于內(nèi)置在MySQL服務(wù)端,而且對很多應(yīng)用都能夠滿足要求,因此被廣泛使用。

在MySQL5.6之前的版本中,只有 MyISAM 存儲引擎支持全文索引。創(chuàng)建全文索引需要指定列標(biāo)記為全文索引,如下面的 content 列。

CREATE TABLE t_news (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	content TEXT,
	author VARCHAR(32),
	title VARCHAR(128),
  FULLTEXT (content)
) ENGINE=InnoDB;

MySQL 5.6以前對中文搜索支持不是太好,需要自己進(jìn)行分詞后將段落預(yù)處理拆分成單詞在入庫。MySQL5.7.6后才有了內(nèi)置的分詞器 ngram。ngram 支持設(shè)置設(shè)置分詞的長度,可以將中文按長度拆分為不同的單詞(雖然不太智能,但滿足大部分場景)??梢酝ㄟ^ MySQL 的全局變量ngram_token_size設(shè)置分詞長度,默認(rèn)是2,支持1-10可選。對于上面的例子,需要指定分詞器構(gòu)建全文索引。

CREATE TABLE t_news (
  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	content TEXT,
	author VARCHAR(32),
	title VARCHAR(128),
  FULLTEXT KEY idx(content) WITH PARSER ngram
) ENGINE=InnoDB;

插入一條數(shù)據(jù)測試。

INSERT INTO `t_news` 
(`id`, `content`, `author`, `title`) 
VALUES ('1', '我有一個數(shù)據(jù)庫和引擎', '島上碼農(nóng)', '數(shù)據(jù)庫引擎');

在簡單的模糊搜索中可以使用 LIKE 來完成,而對于全文檢索需要使用如下方式的語句:

SELECT * FROM t_news 
WHERE MATCH (content) AGAINST ('數(shù)據(jù) 引擎' IN NATURAL LANGUAGE MODE)

通過這種方式可以檢索出剛剛插入的內(nèi)容,而如果使用 LIKE 是沒法完成的。也支持使用相關(guān)性排序,再插入一條數(shù)據(jù):

INSERT INTO `t_news`
(`id`, `content`, `author`, `title`) 
VALUES (2,'我有一個數(shù)據(jù)庫','島上碼農(nóng)','數(shù)據(jù)庫')

然后執(zhí)行排序查詢:

SELECT *, MATCH (content) AGAINST ('數(shù)據(jù) 引擎' ) AS relevance
FROM t_news 
WHERE MATCH (content) AGAINST ('數(shù)據(jù) 引擎' ) 
ORDER BY relevance ASC

這里將匹配值作為一列查詢,以便使用其別名進(jìn)行排序。相關(guān)性越高,對應(yīng)的 relevance 值越大,因此可以用作排序。入股不相關(guān),那么 relevance 的值為0。

布爾模式可以做更多的控制,例如包括使用+號保留匹配結(jié)果和使用-號排除匹配結(jié)果,下面的就匹配了數(shù)據(jù),而排除了包含引擎的數(shù)據(jù)。更多操作符可以參考 MySQL 的官方文檔:全文索引操作符

SELECT * FROM t_news 
WHERE MATCH (content) AGAINST ('+數(shù)據(jù)* -引擎' IN BOOLEAN MODE);

以上就是MySQL 全文索引使用指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL 全文索引的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL中SQL連接操作左連接查詢(LEFT?JOIN)示例詳解

    MySQL中SQL連接操作左連接查詢(LEFT?JOIN)示例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中SQL連接操作左連接查詢(LEFT?JOIN)的相關(guān)資料,左連接(LEFT?JOIN)是SQL中用于連接兩個或多個表的一種操作,它返回左表的所有行,并根據(jù)連接條件從右表中匹配行,需要的朋友可以參考下
    2024-12-12
  • Mysql主從復(fù)制(master-slave)實際操作案例

    Mysql主從復(fù)制(master-slave)實際操作案例

    這篇文章主要介紹了Mysql主從復(fù)制(master-slave)實際操作案例,同時介紹了Mysql grant 用戶授權(quán)的相關(guān)內(nèi)容,需要的朋友可以參考下
    2014-06-06
  • InnoDB中不同SQL語句設(shè)置鎖的情況詳解

    InnoDB中不同SQL語句設(shè)置鎖的情況詳解

    這篇文章主要介紹了InnoDB中不同SQL語句設(shè)置鎖的情況詳解,在Mysql中,鎖定讀、更新、刪除操作通常會對SQL語句處理過程中掃描到的每條索引記錄設(shè)置記錄鎖,需要的朋友可以參考下
    2024-01-01
  • 使用Shell腳本進(jìn)行MySql權(quán)限修改的實現(xiàn)教程

    使用Shell腳本進(jìn)行MySql權(quán)限修改的實現(xiàn)教程

    原先數(shù)據(jù)配置文件中有bind-address=127.0.0.1,注釋掉此配置后,原數(shù)據(jù)庫中默認(rèn)帶%root的權(quán)限,現(xiàn)在需要通過腳本實現(xiàn)白名單列表中的ip添加權(quán)限允許訪問數(shù)據(jù)庫,本文給大家介紹了使用Shell腳本進(jìn)行MySql權(quán)限修改的實現(xiàn)教程,需要的朋友可以參考下
    2024-03-03
  • MYSQL時區(qū)導(dǎo)致時間差了14或13小時的解決方法

    MYSQL時區(qū)導(dǎo)致時間差了14或13小時的解決方法

    本文主要介紹了MYSQL時區(qū)導(dǎo)致時間差了14或13小時的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • windows環(huán)境下mysql數(shù)據(jù)庫的主從同步備份步驟(單向同步)

    windows環(huán)境下mysql數(shù)據(jù)庫的主從同步備份步驟(單向同步)

    本文主要是向大家描述的是在windows環(huán)境之下實現(xiàn)MySQL數(shù)據(jù)庫的主從同步備份的正確操作方案,以下就是文章的詳細(xì)內(nèi)容描述
    2011-05-05
  • mysql 8.0.16 winx64安裝配置方法圖文教程

    mysql 8.0.16 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價值,感興趣的朋友可以參考一下
    2019-05-05
  • MySQL占用內(nèi)存較大與CPU過高測試與解決辦法

    MySQL占用內(nèi)存較大與CPU過高測試與解決辦法

    為了裝mysql環(huán)境測試,裝上后發(fā)現(xiàn)啟動后MySQL占用內(nèi)存了很大,達(dá)8百多兆。網(wǎng)上搜索了一下,得到高人指點my.ini。再也沒見再詳細(xì)的了..只好打開my.ini逐行的啃,雖然英文差了點,不過多少M還是看得明的
    2018-03-03
  • mysql5.7數(shù)據(jù)庫安裝完成后如何配置環(huán)境變量

    mysql5.7數(shù)據(jù)庫安裝完成后如何配置環(huán)境變量

    這篇文章主要為大家詳細(xì)介紹了在win10系統(tǒng)下,mysql5.7數(shù)據(jù)庫安裝完成后配置環(huán)境變量的具體步驟,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Mysql根據(jù)時間查詢?nèi)掌诘膬?yōu)化技巧

    Mysql根據(jù)時間查詢?nèi)掌诘膬?yōu)化技巧

    這篇文章主要介紹了Mysql根據(jù)時間查詢?nèi)掌诘膬?yōu)化技巧,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-03-03

最新評論

蒙阴县| 漳平市| 东光县| 工布江达县| 桓台县| 永宁县| 诸暨市| 崇州市| 永兴县| 英吉沙县| 洪洞县| 江西省| 临猗县| 松阳县| 军事| 平陆县| 海盐县| 延庆县| 鄂托克前旗| 深州市| 鄂尔多斯市| 长泰县| 龙江县| 福鼎市| 江华| 乡宁县| 玛纳斯县| 金堂县| 公主岭市| 长武县| 丹巴县| 新野县| 仙居县| 清河县| 那曲县| 城口县| 东山县| 米林县| 潜山县| 治多县| 韶关市|