Skip to content

TangXiaoLv/Android-Sqlite-Fts5-Tokenizer

Repository files navigation

Android-Sqlite-Fts5

Sqlite3全文检索是本地搜索引擎,用来搜索大数据量(几十万条聊天数据),文本数据再适合不过。

源码配置

Sqlite3源码:3.21.0

fts5分词器:移植于微信的fts4分词器并对搜索精度做了调优。

使用

Fts5官方使用教程

//加载库
System.loadLibrary("sqliteX");

//创建虚拟表
"CREATE VIRTUAL TABLE IF NOT EXISTS message USING fts5(msg,tokenize='wcicu zh_CN');"

编译

使用CMake脚本编译,方便调试及跨平台。

编译选项Compile-time Options

基准测试

测试类: BenchmarkActivity

测试手机: 华为 mete9

表: 随机生成1-200字符串同时插入普通表和fts表。

表量级: 10w,20w,30w,40w,50w,70w,100w

搜索策略: 每个量级取1,2,3,4个相同关键字测试,每个关键字测试10遍取耗时平均数

搜索语句:

  • 普通表:SELECT * FROM message WHERE msg LIKE '%?%'
  • fts表:SELECT * FROM ftsmessage WHERE ftsmessage MATCH ?

搜索结果:

- 关键字/个 结果/条 耗时/ms 关键字/个 结果/条 耗时/ms 关键字/个 结果/条 耗时/ms 关键字/个 结果/条 耗时/ms
普通搜索/10w 1 56952 432 2 594 497 3 4 489 4 0 486
全文检索/10w 1 56952 433 2 594 87 3 4 72 4 0 4
普通搜索/20w 1 72018 841 2 978 913 3 19 894 4 1 909
全文检索/20w 1 72018 570 2 978 109 3 19 104 4 1 123
普通搜索/30w 1 110646 1194 2 2019 1371 3 33 1331 4 2 1328
全文检索/30w 1 110646 784 2 2019 169 3 33 145 4 2 151
普通搜索/40w 1 227821 1375 2 5914 1823 3 56 1776 4 2 1763
全文检索/40w 1 227821 1366 2 5914 253 3 56 179 4 2 205
普通搜索/50w 1 183989 1876 2 1556 2215 3 32 2171 4 1 2167
全文检索/50w 1 183989 1086 2 1556 176 3 32 184 4 1 233
普通搜索/70w 1 257055 2629 2 2333 3071 3 52 3014 4 1 3021
全文检索/70w 1 257055 1667 2 2333 231 3 52 238 4 1 227
普通搜索/100w 1 368484 3695 2 8246 4372 3 50 4285 4 1 4271
全文检索/100w 1 368484 2341 2 8246 387 3 50 305 4 1 341