灵素书斋 读书 · 写字 · 慢功夫

中文全文检索:不用分词库也能搜准

问题

SQLite 的 FTS5 默认分词器会把中文整段当成一个词元,搜索基本失效。

思路

把中文逐字拆开入库,查询时把连续的中文拼成短语(短语要求词元相邻):

  • 入库:中医大辞典 → 中 医 大 辞 典
  • 查询:辞典 → "辞 典"

这样既保留子串匹配的准确度,又不需要任何分词库。英文则按整个单词处理。

核心就三行:

// 中文逐字拆开
return String(text).replace(/[\u4e00-\u9fff]/g, (c) => ' ' + c + ' ')

实测效果

  • 中文 → 命中正文含"中文"的文章
  • keywords → 英文单词照常命中
  • 草稿不进索引,搜不到

顺带的好处

同一张索引表可以装下不同来源的内容(文章、论坛帖子、辞典词条),
后面把辞书数据导进来时不用再动检索逻辑。

评论

还没有评论。