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

深入探討MySQL分詞查詢與全文索引技術(shù)

 更新時(shí)間:2025年07月24日 08:19:37   作者:Micro麥可樂(lè)  
中小項(xiàng)目中的一些簡(jiǎn)單的分詞搜索功能,其實(shí)可以試試 MySQL 分詞查詢,本文將深入探討 MySQL 的分詞查詢技術(shù),從基礎(chǔ)使用到中文處理全面解析,感興趣的可以了解一下

1. 前言

相信小伙伴們?cè)趯W(xué)習(xí) Spring Cloud 微服務(wù)的過(guò)程中涉及到搜索相關(guān)的,你一定會(huì)想到使用Elasticsearch !沒(méi)錯(cuò) Elasticsearch 很強(qiáng)大,但是對(duì)于一些中小型的項(xiàng)目、網(wǎng)站,簡(jiǎn)單的一些分詞搜索需求,如果使用 Elasticsearch 無(wú)論是硬件成本、開(kāi)發(fā)開(kāi)發(fā)成本都大大增加!

如果中小項(xiàng)目中一些簡(jiǎn)單的分詞搜索,可以試試 MySQL 分詞查詢,本章節(jié)跟著博主深入探討 MySQL 的分詞查詢技術(shù),從基礎(chǔ)使用到中文處理全面解析。

2. MySQL 全文索引原理

MySQL 自 5.6 起提供了全文索引(Full?Text Index)功能,通過(guò)分詞(Tokenization)機(jī)制將一段文本拆分成一個(gè)個(gè)“詞元”(token),并建立倒排索引,從而實(shí)現(xiàn)高效的分詞查詢

1、分詞(Tokenization

將待索引文本(通常是 TEXT 或 VARCHAR)拆分為一個(gè)個(gè)詞元。例如,英文文本會(huì)按空格與標(biāo)點(diǎn)分詞;中文文本默認(rèn)按字符切割,但可配置 ngram 分詞。

2、倒排索引(Inverted Index

對(duì)每個(gè)詞元,記錄它所出現(xiàn)的所有行號(hào)(文檔 ID),并統(tǒng)計(jì)詞元出現(xiàn)頻次。查詢時(shí),將搜索詞同樣分詞后,快速在倒排索引中定位相關(guān)文檔。

3、相關(guān)性計(jì)算

MySQL 根據(jù)詞元在文檔中出現(xiàn)的頻次(Term Frequency)、在整個(gè)表中出現(xiàn)的文檔數(shù)(Document Frequency)等,使用類似 TF?IDF 的算法計(jì)算相關(guān)度,從高到低排序返回。

3. 配置全文索引與分詞查詢

下面我們以一個(gè)articles表,字段 articles_id 、title、content 為例子來(lái)進(jìn)行操作,以下是建表語(yǔ)句和測(cè)試數(shù)據(jù)

CREATE TABLE `articles` (
  `articles_id` int NOT NULL AUTO_INCREMENT COMMENT '文章ID',
  `title` varchar(255) DEFAULT NULL COMMENT '文章標(biāo)題',
  `content` text COMMENT '文章內(nèi)容',
  PRIMARY KEY (`articles_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `articles` (`articles_id`, `title`, `content`) VALUES (1, '分詞MySQL查詢', '跟麥可樂(lè)學(xué)編程:MySQL分詞查詢');
INSERT INTO `articles` (`articles_id`, `title`, `content`) VALUES (2, 'MySQL分詞', '跟麥可樂(lè)學(xué):MySQL分詞');

3.1 建表與索引

對(duì)Mysql熟悉的小伙伴,可以直接使用SQL進(jìn)行設(shè)置

ALTER TABLE articles 
ADD FULLTEXT INDEX ft_index (title, content) 
WITH PARSER ngram;  -- 中文需指定ngram解析器

喜歡圖形化操作的小伙伴可按下圖設(shè)置

3.2 基本查詢語(yǔ)法

自然語(yǔ)言模式(Natural Language Mode)

SELECT articles_id, title, content,
	MATCH(title, content) AGAINST('分詞 查詢') AS score
FROM articles
WHERE MATCH(title, content)
      AGAINST('分詞 查詢');

默認(rèn)按自然語(yǔ)言解析查詢?cè)~,忽略停用詞、極短詞和頻繁出現(xiàn)詞

查詢輸出效果

布爾模式(Boolean Mode)

SELECT articles_id, title, content FROM articles
WHERE MATCH(title,content)
      AGAINST('+分詞 -查詢' IN BOOLEAN MODE);

查詢輸出效果

3.3 關(guān)鍵操作符

通過(guò)布爾模式查詢上圖的效果,下面介紹一下布爾模式支持邏輯運(yùn)算符

操作符作用示例
+必須包含+apple +juice
-必須排除apple -macbook
~相關(guān)性降級(jí)~fruit ~vegetable
*通配符data* (匹配database等)
""短語(yǔ)搜索"high performance"

小伙伴們通過(guò)上述操作符,就可以自由定制自己的分詞查詢規(guī)則

4. 中文分詞 ngram 與插件方案

4.1 ngram 分詞

MySQL 自帶的 ngram 插件可實(shí)現(xiàn)中文近似分詞:

-- 修改my.cnf(建議token長(zhǎng)度2)
[mysqld]
ngram_token_size=2

-- 建表時(shí)指定分詞器 如:
CREATE TABLE chinese_news (
  id INT PRIMARY KEY,
  content TEXT,
  FULLTEXT INDEX (content) WITH PARSER ngram
);

配置了 ngram_token_size=2 中文分詞原理,按兩字切分,例如

原始文本:"分詞查詢"
分詞結(jié)果:["分詞","詞查","查詢"]

4.2 第三方分詞插件

Mecab、jieba 插件:將分詞邏輯交給外部庫(kù),實(shí)現(xiàn)更精準(zhǔn)的中文分詞。

這里博主就不做過(guò)多介紹了,可以根據(jù)插件文檔進(jìn)行安裝即可

5. 進(jìn)階優(yōu)化與監(jiān)控

1.查詢性能監(jiān)控

  • 使用 EXPLAIN 查看 FULLTEXT 查詢是否走全文索引。
  • 利用慢查詢?nèi)罩竞Y選耗時(shí)的全文檢索。

2.分片與分表

對(duì)于超大文本表,可按日期或業(yè)務(wù)維度分表分區(qū),保證索引文件大小可控。

3.增量索引

InnoDB 支持后臺(tái)算法自動(dòng)增量更新全文索引,無(wú)需手動(dòng)重建整個(gè)索引。

4.權(quán)重調(diào)優(yōu)

MATCH() AGAINST() 可對(duì)多列設(shè)置權(quán)重:

MATCH(title) AGAINST('分詞') * 2 +
MATCH(content) AGAINST('分詞') AS relevance

6. 結(jié)語(yǔ)

MySQL分詞查詢?yōu)槿乃阉魈峁┝烁咝У膬?nèi)置解決方案。通過(guò)合理配置分詞參數(shù)、選擇合適的分詞器(如 ngram 或第三方插件),并運(yùn)用自然語(yǔ)言模式與布爾模式,小伙伴們可以輕松滿足大多數(shù)中小項(xiàng)目中的搜索場(chǎng)景的需求。對(duì)于更復(fù)雜的需求,建議結(jié)合專業(yè)搜索引擎如Elasticsearch構(gòu)建搜索體系。

到此這篇關(guān)于深入探討MySQL分詞查詢與全文索引技術(shù)的文章就介紹到這了,更多相關(guān)MySQL分詞查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

广南县| 漾濞| 古田县| 修武县| 元氏县| 伊川县| 米脂县| 乌兰浩特市| 库尔勒市| 江孜县| 朝阳市| 荥阳市| 铜川市| 阿拉善左旗| 商水县| 镇雄县| 车致| 南京市| 双牌县| 施甸县| 福贡县| 个旧市| 六盘水市| 耿马| 大港区| 青河县| 饶阳县| 赤城县| 隆德县| 阜平县| 墨竹工卡县| 吉林市| 高尔夫| 高陵县| 衡阳县| 鄢陵县| 泽州县| 澜沧| 雷州市| 泰宁县| 新闻|