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

MySQL 全文索引使用指南

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

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

全文索引支持通過基于字符(CHAR、VARCHAR 和 TEXT 類型的列)的檢索,也可以支持自然語言模式(Natural Language Mode, 默認(rèn))和布爾模式 (Boolean Mode)。例如我們搜索“數(shù)據(jù)庫引擎”的時(shí)候,內(nèi)容中包括“數(shù)據(jù)庫”、“引擎”和“數(shù)據(jù)庫引擎”的內(nèi)容都會(huì)檢索出來。全文索引的實(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ù)處理拆分成單詞在入庫。MySQL5.7.6后才有了內(nèi)置的分詞器 ngram。ngram 支持設(shè)置設(shè)置分詞的長度,可以將中文按長度拆分為不同的單詞(雖然不太智能,但滿足大部分場景)??梢酝ㄟ^ MySQL 的全局變量ngram_token_size設(shè)置分詞長度,默認(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ù)庫和引擎', '島上碼農(nóng)', '數(shù)據(jù)庫引擎');

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

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,'我有一個(gè)數(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)性越高,對(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回表的性能傷害程度有多大

    這篇文章主要介紹了MySQL回表的性能傷害程度有多大?下面我們就帶著疑問進(jìn)入下面文章了解詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-02-02
  • Mysql中JSON字段的值的實(shí)現(xiàn)示例

    Mysql中JSON字段的值的實(shí)現(xiàn)示例

    本文中介紹了如何通過SQL語句查詢JSON字段中的特定數(shù)據(jù),如查詢數(shù)組中的元素,提取映射中的值,以及使用不同的JSON函數(shù)來處理數(shù)據(jù),感興趣的可以了解一下
    2024-09-09
  • 一文了解MYSQL三大范式和表約束

    一文了解MYSQL三大范式和表約束

    范式是"符合某一種級(jí)別的關(guān)系模式的集合,表示一個(gè)關(guān)系內(nèi)部各屬性之間的聯(lián)系的合理化程度",下面這篇文章主要給大家介紹了關(guān)于MYSQL三大范式和表約束的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 如何利用MySQL的binlog恢復(fù)誤刪數(shù)據(jù)庫詳解

    如何利用MySQL的binlog恢復(fù)誤刪數(shù)據(jù)庫詳解

    MySQL一旦誤刪數(shù)據(jù)庫之后恢復(fù)數(shù)據(jù)很麻煩,這里記錄一下艱辛的恢復(fù)過程,這篇文章主要給大家介紹了關(guān)于如何利用MySQL的binlog恢復(fù)誤刪數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • mysql-connector-java.jar包的下載過程詳解

    mysql-connector-java.jar包的下載過程詳解

    這篇文章主要介紹了mysql-connector-java.jar包的下載過程詳解,mysql-connector-java.jar是java連接使用MySQL是必不可少的,感興趣的可以了解一下
    2020-07-07
  • MySQL查詢優(yōu)化之查詢慢原因和解決技巧

    MySQL查詢優(yōu)化之查詢慢原因和解決技巧

    這篇文章主要介紹了MySQL查詢優(yōu)化之查詢慢原因和解決技巧,內(nèi)容講解的很詳細(xì),有對(duì)于這方面不太懂的同學(xué)可以研究一下。
    2021-02-02
  • MySQL 數(shù)據(jù)庫鐵律(小結(jié))

    MySQL 數(shù)據(jù)庫鐵律(小結(jié))

    這篇文章主要介紹了MySQL 數(shù)據(jù)庫鐵律,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MySQL PXC構(gòu)建一個(gè)新節(jié)點(diǎn)只需IST傳輸?shù)姆椒?推薦)

    MySQL PXC構(gòu)建一個(gè)新節(jié)點(diǎn)只需IST傳輸?shù)姆椒?推薦)

    下面小編就為大家?guī)硪黄狹ySQL PXC構(gòu)建一個(gè)新節(jié)點(diǎn)只需IST傳輸?shù)姆椒?推薦)。小編覺的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 最新評(píng)論