[!提示] 新增:Rust Crate!感谢 xuxiaocheng0201
Simple 是一个支持中文和拼音的 sqlite3 fts5 扩展。它完整实现了 微信移动端的全文检索多音字问题解决方案 一文中的方案四,非常简单和高效地支持中文及拼音的搜索。
实现相关介绍:https://www.wangfenjin.com/posts/simple-tokenizer/
在此基础上,我们还支持通过 cppjieba 实现更精准的词组匹配,介绍文章见 https://www.wangfenjin.com/posts/simple-jieba-tokenizer/
首先需要确认你使用的 SQLite 版本支持 fts5 扩展,确认方法是:
select fts5(?1);
然后就可以使用了,具体示例可以参考 example.sql 和 cpp
$ ./sqlite3
SQLite 版本 3.32.3 2020-06-18 14:00:33
输入 ".help" 获取使用提示。
已连接到临时内存数据库。
使用 ".open FILENAME" 重新打开持久性数据库。
sqlite> .load libsimple
sqlite> CREATE VIRTUAL TABLE t1 USING fts5(text, tokenize = 'simple');
sqlite> INSERT INTO t1 VALUES ('中华人民共和国国歌');
sqlite> select simple_highlight(t1, 0, '[', ']') as text from t1 where text match simple_query('中华国歌');
[中华]人民共和[国国歌]
sqlite> select simple_highlight(t1, 0, '[', ']') as text from t1 where text match jieba_query('中华国歌');
[中华]人民共和国[国歌]
sqlite> select simple_highlight(t1, 0, '[', ']') as text from t1 where text match simple_query('中华人民共和国');
[中华人民共和国国]歌
sqlite> select simple_highlight(t1, 0, '[', ']') as text from t1 where text match jieba_query('中华人民共和国');
[中华人民共和国]国歌
-DSIMPLE_WITH_JIEBA=OFF 关闭结巴分词的功能 #35使用支持 c++14 及以上的编译器编译,直接在根目录运行 ./build-and-run 就会编译所有需要的文件并运行测试。编译输出见 output 目录
也可以手动使用 cmake:
mkdir build; cd build cmake .. make -j 12 make install
支持 iOS 编译:
./build-ios.sh
src/entry 入口文件,注册 sqlite tokenizer 和函数src/simple_tokenizer 分词器实现src/simple_highlight 高亮函数,基于内置的高亮函数改进,让命中的相邻单词连续高亮src/pinyin 中文转拼音以及拼音拆 query 的实现