1. 程式人生 > >Simple: 一個支援中文和拼音搜尋的 sqlite fts5外掛

Simple: 一個支援中文和拼音搜尋的 sqlite fts5外掛

之前的工作關係,需要在手機上支援中文和拼音搜尋。由於手機上儲存資料一般都是用 sqlite,所以是基於 sqlite3 fts5 來實現。這段時間再次入門 c++,所以想用 c++ 實現一下,一來用於練手,二來當時做的時候發現網路上這方面開源的實現不多,也造福下其他人。

背景

搜尋現在幾乎是每個 APP 必備的功能,使用者已經習慣了搜尋框搜一下,避免到處去找。搜尋也是幫助使用者查詢舊資訊,發現新功能的一個重要手段。平常我們用微信的時候經常會搜尋聯絡人和聊天記錄,發現微信這一塊做的還是非常好的。關於微信的全文搜尋,可以看看這兩篇文章:微信全文搜尋優化之路 和 微信移動端的全文檢索多音字問題解決方案 。

第一篇文章主要是問題和原理的概述,第二篇文章是核心分詞器的實現。我寫的這個專案主要是實現了 simple 分詞器,並提供一些輔助函式幫助使用。

Simple 分詞器

搜尋的核心是建倒排索引,建索引的核心是分詞器。 跟名字一下,Simple 分詞器的規則非常簡單:

  1. 空白符跳過
  2. 連續的數字作為整體是一個索引
  3. 連續的英文字母作為整體並轉換成小寫索引
  4. 中文字單獨建索引,並且把中文字轉成拼音後也建搜尋,這樣就能同時支援中文和拼音檢索。另外把拼音首字母也建索引,這樣搜尋 zjl 就能命中 “周杰倫”。
  5. 其他字元統一單獨建索引,這樣搜尋