国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL 全文索引使用指南

MySQL 全文索引使用指南

2021-08-04 15:28島上碼農 Mysql

在 MySQL 中,我們經常使用 WHERE 條件用于進行值的相等比較、范圍過濾。然而,我們也會使用關鍵字進行搜索,這個基于搜索值與其他值的相關性來進行過濾。MySQL全文檢索即用于這種場景。本篇將介紹如何使用全文檢索。

全文索引需要特殊的查詢語法。有沒有索引都可以進行全文檢索,但是存在索引時會提高匹配的速度。全文索引的索引通過特殊的結構存儲以便于找到文檔中包含搜索關鍵字對應的內容。在我們日常生活中,最常見的全文檢索就是網絡搜索引擎。雖然,網絡搜索引擎的數據里十分龐大,并且通常也不會使用關系型數據庫,但是原理是相似的。

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

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

?
1
2
3
4
5
6
7
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以前對中文搜索支持不是太好,需要自己進行分詞后將段落預處理拆分成單詞在入庫。MySQL5.7.6后才有了內置的分詞器 ngram。ngram 支持設置設置分詞的長度,可以將中文按長度拆分為不同的單詞(雖然不太智能,但滿足大部分場景)。可以通過 MySQL 的全局變量ngram_token_size設置分詞長度,默認是2,支持1-10可選。對于上面的例子,需要指定分詞器構建全文索引。

?
1
2
3
4
5
6
7
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;

插入一條數據測試。

?
1
2
3
INSERT INTO `t_news`
(`id`, `content`, `author`, `title`)
VALUES ('1', '我有一個數據庫和引擎', '島上碼農', '數據庫引擎');

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

?
1
2
SELECT * FROM t_news
WHERE MATCH (content) AGAINST ('數據 引擎' IN NATURAL LANGUAGE MODE)

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

?
1
2
3
INSERT INTO `t_news`
(`id`, `content`, `author`, `title`)
VALUES (2,'我有一個數據庫','島上碼農','數據庫')

然后執行排序查詢:

?
1
2
3
4
SELECT *, MATCH (content) AGAINST ('數據 引擎' ) AS relevance
FROM t_news
WHERE MATCH (content) AGAINST ('數據 引擎' )
ORDER BY relevance ASC

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

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

?
1
2
SELECT * FROM t_news
WHERE MATCH (content) AGAINST ('+數據* -引擎' IN BOOLEAN MODE);

以上就是MySQL 全文索引使用指南的詳細內容,更多關于MySQL 全文索引的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6965859375734849567

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性色网 | 人人爽在线观看 | 一区欧美| 日韩视频在线观看一区 | 99久久精品一区二区成人 | 久久免费黄色网址 | 午夜影视免费观看 | 欧美专区在线 | 亚洲精品视频免费 | 久久99精品久久久久久国产越南 | 久久国产亚洲 | 九九福利 | 欧美日韩精品一区 | 午夜视频在线观看网站 | 日韩三级在线免费观看 | 6080yy午夜一二三区久久 | 99热国产精品 | 日韩国产精品一区 | 国产一区二区三区精品久久久 | 日韩有码一区二区三区 | 中文字幕日韩欧美一区二区三区 | 国产丝袜视频 | 久久99精品久久久久蜜臀 | 成人小视频在线观看 | 亚洲婷婷免费 | 欧美久久久久久久久久久 | 五月婷婷在线观看视频 | 国内精品久久久久久中文字幕 | 亚洲国产网站 | 精彩视频一区二区三区 | 亚洲国产精品一二三区 | 亚洲视频免费 | 婷婷综合激情 | 国产在线精品一区二区三区 | 免费观看黄色大片 | 精品国产一区二区三区日日嗨 | 在线国产视频 | 国产精品一区一区三区 | 黄色的视频免费看 | 国产一区二区三区免费播放 | 四房婷婷 |