admin管理员组文章数量:1344720
android sqlite fts4,SQLite FTS3/FTS4与一些使用心得
此文已由作者王攀授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
简介
对于今天的移动、桌面客户端应用而言,离线全文检索的需求已经十分强烈,我们日常使用的邮件客户端、云音乐、云笔记、易信等就是离线全文检索的潜在用户。
作为目前使用最为广泛的嵌入式数据库,SQLite3其实内置了全文检索的扩展模块——FTS。FTS分为FTS1、FTS2、FTS3、FTS4和FTS5几个版本,其中FTS1和FTS2已经被废弃,而FTS3在2007年9月4日发布的SQLite 3.5.0中被引入,其增强版FTS4则第一次出现在2010年12月8日的SQLite 3.7.4中。由于FTS3与FTS4有着千丝万缕的联系,所以本文将两种FTS引擎放在一起来介绍。FTS5则它们不兼容,所以笔者将以另外一个文章来单独作介绍。
相比于普通表,FTS3/FTS4其实是两种虚表。当你创建一个名为t的FTS虚表的时候,你会发现数据库中其实创建了若干个普通表用于存储物理数据,它们被称为影子表(shadow tables),分别命名为t_content、t_messageize、t_segdir、t_segments、t_stat等。
编译
想让SQLite支持FTS3/FTS4,在编译SQLite的时候需要打开以下编译开关
-DSQLITE_ENABLE_FTS3
注:Chromium、CEF和iOS7及以后的版本内建的SQLite都默认打开了此选项。
如果想要让FTS3/FTS4支持带括号优先级的高级查询(见下文),那么需要同时打开以下开关:
-DSQLITE_ENABLE_FTS3_PARENTHESIS
注:Chromium、CEF内建SQLite没有打开该开关。
如果想要让FTS3/FTS4支持ICU分词器,则需要再打开以下开关:
-DSQLITE_ENABLE_ICU
注:Chromium、CEF内建SQLite打开并实现了该开关;iOS自带的没有。
表操作
最简单地创建表的形式:-- 创建一个fts3表message,包含title和body两列CREATE VIRTUAL TABLE message USING fts3(title, body);-- 创建一个fts4表message,包含title和body两列CREATE VIRTUAL TABLE message USING fts4(title, body);
需要注意的是如果在创建表的时候给某个列指定了类型,那么这些类型将被完全忽略。 我们还可以在建表的时候给表指定分词器。例如:CREATE VIRTUAL TABLE message USING fts3(title, body, t
本文标签: android sqlite fts4SQLite FTS3FTS4与一些使用心得
版权声明:本文标题:android sqlite fts4,SQLite FTS3FTS4与一些使用心得 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1701463130a409759.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论