首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 內建全文檢索實現中文相關搜尋:二元分詞與區位碼方案

     編輯:MySQL 資料庫相關知識

背景

MySQL 4.0+ 支援全文檢索,但僅針對英文(以空格/標點分詞)。中文無分隔符,需自行分詞方案。

核心挑戰:中文分詞

  • 英文:full text search → 3 詞
  • 中文:全文檢索 → 無法自動切分

方案一:二元分詞

將中文文本按每兩個字元切分:

原文:全文檢索
分詞:全文、文檢、檢索

建立對應索引表,查詢時同樣二元切分後匹配。

方案二:區位碼編碼

利用中文區位碼(GB2312 編碼規則),將漢字轉為 4 位數字編碼,再建立索引。

相似度計算

基於向量空間模型(VSM)或 BM25 算法,結合詞頻(TF)、逆文檔頻率(IDF)計算相關性分數。

實現架構

  1. 寫入時:分詞 → 建立倒排索引(詞 → 文檔 ID + 位置 + 權重)
  2. 查詢時:分詞 → 取得候選文檔 → 計算相似度 → 排序返回
  3. 支援邏輯:AND/OR/NOT、短語匹配、模糊匹配

效能優化

  • 詞典壓縮:前綴樹/雙陣列 Trie
  • 索引分片:按文檔 ID 或時間分區
  • 快取熱門詞彙倒排鏈
  • 非同步索引更新:寫入先入隊列,批次合併

遷移建議

MySQL 5.7+ 內建 ngram parser 解決中文分詞,5.6+ InnoDB 支援全文索引。新專案建議直接使用原生功能;舊系統可參考本文方案過渡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved