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

分詞搜索必須上Elasticsearch?試試MySQL分詞查詢技術(shù)

 更新時間:2026年04月23日 15:05:09   作者:Micro麥可樂  
文章介紹了MySQL的全文索引及其分詞查詢技術(shù),從原理、配置、基本查詢、中文分詞、進階優(yōu)化與監(jiān)控等多個方面進行詳細(xì)闡述,適合中小型項目簡單分詞搜索需求,感興趣的朋友跟隨小編一起看看吧

1. 前言

相信小伙伴們在學(xué)習(xí) Spring Cloud 微服務(wù)的過程中涉及到搜索相關(guān)的,你一定會想到使用Elasticsearch !沒錯 Elasticsearch 很強大,但是對于一些中小型的項目、網(wǎng)站,簡單的一些分詞搜索需求,如果使用 Elasticsearch 無論是硬件成本、開發(fā)開發(fā)成本都大大增加!

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

2. MySQL 全文索引原理

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

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

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

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

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

下面我們以一個articles表,字段 articles_id 、title、content 為例子來進行操作,以下是建表語句和測試數(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查詢', '跟麥可樂學(xué)編程:MySQL分詞查詢');
INSERT INTO `articles` (`articles_id`, `title`, `content`) VALUES (2, 'MySQL分詞', '跟麥可樂學(xué):MySQL分詞');

3.1 建表與索引

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

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

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

3.2 基本查詢語法

自然語言模式(Natural Language Mode)

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

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

查詢輸出效果

布爾模式(Boolean Mode)

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

查詢輸出效果

3.3 關(guān)鍵操作符

通過布爾模式查詢上圖的效果,下面介紹一下布爾模式支持邏輯運算符

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

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

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

4.1 ngram 分詞

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

-- 修改my.cnf(建議token長度2)
[mysqld]
ngram_token_size=2
-- 建表時指定分詞器 如:
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 插件:將分詞邏輯交給外部庫,實現(xiàn)更精準(zhǔn)的中文分詞。

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

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

  • 查詢性能監(jiān)控
    • 使用 EXPLAIN 查看 FULLTEXT 查詢是否走全文索引。
    • 利用慢查詢?nèi)罩竞Y選耗時的全文檢索。
  • 分片與分表
    • 對于超大文本表,可按日期或業(yè)務(wù)維度分表分區(qū),保證索引文件大小可控。
  • 增量索引
    • InnoDB 支持后臺算法自動增量更新全文索引,無需手動重建整個索引。
  • 權(quán)重調(diào)優(yōu)

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

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

6. 結(jié)語

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

到此這篇關(guān)于分詞搜索必須上Elasticsearch?試試MySQL分詞查詢技術(shù)的文章就介紹到這了,更多相關(guān)mysql分詞查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中的GROUP_CONCAT()函數(shù)使用及說明

    MySQL中的GROUP_CONCAT()函數(shù)使用及說明

    GROUP_CONCAT()函數(shù)在MySQL中用于將多行數(shù)據(jù)合并為一行,通過本文我們可以了解其基本語法、應(yīng)用示例、參數(shù)使用以及注意事項
    2025-12-12
  • mysql 存儲過程輸入輸出參數(shù)示例

    mysql 存儲過程輸入輸出參數(shù)示例

    創(chuàng)建存儲過程時可以輸入輸出參數(shù),下面是一個mysql存儲過程的創(chuàng)建示例,需要的朋友可以參考下
    2014-08-08
  • MySQL修改默認(rèn)存儲引擎的實現(xiàn)方法

    MySQL修改默認(rèn)存儲引擎的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狹ySQL修改默認(rèn)存儲引擎的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • mysql免安裝版配置步驟詳解分享

    mysql免安裝版配置步驟詳解分享

    這篇文章主要介紹了mysql免安裝版配置步驟詳解,提供了二個網(wǎng)友的安裝方法,大家可以參考使用
    2013-12-12
  • mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法

    mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET

    這篇文章主要介紹了mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法,結(jié)合實例形式較為詳細(xì)的分析了mysql存儲過程創(chuàng)建、調(diào)用及變量創(chuàng)建、賦值具體原理、操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-12-12
  • mysql緩沖和緩存設(shè)置詳解

    mysql緩沖和緩存設(shè)置詳解

    本文主要給大家講解的是mysql優(yōu)化過程中比較重要的2個參數(shù)緩沖和緩存的設(shè)置,希望大家能夠喜歡
    2016-12-12
  • MySQL 建表的優(yōu)化策略 小結(jié)

    MySQL 建表的優(yōu)化策略 小結(jié)

    mysql 數(shù)據(jù)庫建表經(jīng)驗總結(jié),用做優(yōu)化表結(jié)構(gòu)的參考
    2009-09-09
  • mssql轉(zhuǎn)換mysql的方法小結(jié)

    mssql轉(zhuǎn)換mysql的方法小結(jié)

    mssql轉(zhuǎn)換mysql的方法小結(jié),需要的朋友可以參考下。
    2011-03-03
  • MySQL回滾日志(undo?log)的作用和使用詳解

    MySQL回滾日志(undo?log)的作用和使用詳解

    undo?log是innodb引擎的一種日志,在事務(wù)的修改記錄之前,會把該記錄的原值先保存起來再做修改,以便修改過程中出錯能夠恢復(fù)原值或者其他的事務(wù)讀取,這篇文章主要給大家介紹了關(guān)于MySQL回滾日志(undo?log)的作用和使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • MySQL 5.7安裝中的常見問題分析及解決方案

    MySQL 5.7安裝中的常見問題分析及解決方案

    在Linux服務(wù)器上安裝MySQL數(shù)據(jù)庫時,尤其是在CentOS 7等操作系統(tǒng)上,可能會遇到一些安裝包和依賴關(guān)系相關(guān)的錯誤,這些問題的產(chǎn)生原因可以是多個方面,本文將通過對具體錯誤的分析和解決方案的闡述,幫助大家快速解決在安裝MySQL 5.7版本過程中可能遇到的問題
    2024-11-11

最新評論

确山县| 淮南市| 德化县| 眉山市| 大洼县| 赞皇县| 枝江市| 姜堰市| 西乌| 汶川县| 宣恩县| 外汇| 从江县| 都昌县| 玛多县| 龙山县| 新建县| 洪江市| 卓尼县| 清水河县| 宝山区| 玉溪市| 武威市| 白城市| 鄄城县| 舞钢市| 邵阳市| 莱芜市| 宣威市| 尼木县| 汝南县| 嵊泗县| 青冈县| 翁牛特旗| 陆良县| 宁化县| 通辽市| 彩票| 铜川市| 汨罗市| 盐源县|