MATCH(col1, col2, ...) AGAINST(expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
+(必含)、-(排除)、*(萬用字元)等操作符預設最小索引詞長 4 字元;停用詞(stopwords)會被忽略。
MySQL 內建不支援 CJK(中日韓)分詞。早期曾有 MySQL Chinese+ 專案(GPL 但未開源),但主流方案皆採用應用層分詞 + 反向索引架構:
DV_ChineseWordSegment()「數據庫的應用」→「數據」「據庫」「庫的」「的應」「應用」
「全文搜尋」→「全文」「文搜」「搜尋」
搜尋「數據庫」實際匹配「數據」「據庫」,屬傳統重疊 N-gram 方案。雖精度不如語義分詞,但索引與查詢邏輯一致,工程實用性極強。
SubString() 實現逐位元組掃描,遇高位元組(>0x7f)一次吞 3 字元(GBK 雙字節 + 可能的擴展),精確控制字元級截取,避免 mb_substr 效能開銷。
主題/內容 → DV_ChineseWordSegment() → 詞陣列 → implode(' ') → UPDATE topic_ft/bbs_ft SET topicindex=... WHERE topicid=...
ngram 全文解析器,支援中日韓無縫分詞smartcn、kuromoji 等分析器本文方案雖屬「過時」,但對理解全文搜尋底層原理、維護老專案仍具高參考價值。