校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > MySQL 全文索引使用指南

MySQL 全文索引使用指南

熱門標(biāo)簽:武漢電銷機(jī)器人電話 400電話變更申請(qǐng) 大豐地圖標(biāo)注app 催天下外呼系統(tǒng) 北京金倫外呼系統(tǒng) 400電話辦理服務(wù)價(jià)格最實(shí)惠 呂梁外呼系統(tǒng) html地圖標(biāo)注并導(dǎo)航 南太平洋地圖標(biāo)注

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

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

在MySQL5.6之前的版本中,只有 MyISAM 存儲(chǔ)引擎支持全文索引。創(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以前對(duì)中文搜索支持不是太好,需要自己進(jìn)行分詞后將段落預(yù)處理拆分成單詞在入庫(kù)。MySQL5.7.6后才有了內(nèi)置的分詞器 ngram。ngram 支持設(shè)置設(shè)置分詞的長(zhǎng)度,可以將中文按長(zhǎng)度拆分為不同的單詞(雖然不太智能,但滿足大部分場(chǎng)景)。可以通過(guò) MySQL 的全局變量ngram_token_size設(shè)置分詞長(zhǎng)度,默認(rèn)是2,支持1-10可選。對(duì)于上面的例子,需要指定分詞器構(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ù)測(cè)試。

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

在簡(jiǎn)單的模糊搜索中可以使用 LIKE 來(lái)完成,而對(duì)于全文檢索需要使用如下方式的語(yǔ)句:

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

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

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

然后執(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)性越高,對(duì)應(yīng)的 relevance 值越大,因此可以用作排序。入股不相關(guān),那么 relevance 的值為0。

布爾模式可以做更多的控制,例如包括使用+號(hào)保留匹配結(jié)果和使用-號(hào)排除匹配結(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 全文索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL 全文索引的原理與缺陷
  • MySQL全文索引、聯(lián)合索引、like查詢、json查詢速度哪個(gè)快
  • MySQL全文索引實(shí)現(xiàn)簡(jiǎn)單版搜索引擎實(shí)例代碼
  • MySQL創(chuàng)建全文索引分享
  • MySQL全文索引應(yīng)用簡(jiǎn)明教程
  • 基于mysql全文索引的深入理解

標(biāo)簽:自貢 麗水 龍巖 無(wú)錫 迪慶 西寧 徐州 南充

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL 全文索引使用指南》,本文關(guān)鍵詞  MySQL,全文,索引,使用指南,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL 全文索引使用指南》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL 全文索引使用指南的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 长寿区| 安宁市| 渭南市| 温宿县| 河津市| 巧家县| 托克托县| 萨嘎县| 陆川县| 广州市| 友谊县| 舞钢市| 冷水江市| 霍林郭勒市| 鄯善县| 三河市| 吉隆县| 襄城县| 益阳市| 南康市| 玉屏| 上高县| 北安市| 镇远县| 桦川县| 龙游县| 延吉市| 故城县| 南和县| 岳西县| 英吉沙县| 东乌珠穆沁旗| 安西县| 黎川县| 郴州市| 陵川县| 吴忠市| 葫芦岛市| 扶沟县| 江源县| 思南县|