支持中文和拼音的 SQLite fts5 全文搜索扩展 | A SQLite3 fts5 tokenizer which supports Chinese and PinYin
MIT License
[!TIP] 新增: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 version 3.32.3 2020-06-18 14:00:33
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
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 的实现