我正在开发一个Android应用程序,它必须在一个大表中执行子字符串搜索(大约500'000个带有街道和位置名称的条目,所以每个条目只有几个单词).
CREATE TABLE Elements (elementID INTEGER, type INTEGER, name TEXT, data BLOB)
Run Code Online (Sandbox Code Playgroud)
请注意,只有20%的条目包含"name"列中的字符串.
执行以下查询几乎需要2分钟:
SELECT elementID, name FROM Elements WHERE name LIKE %foo%
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用FTS3来加速查询.这非常成功,查询时间减少到1分钟(令人惊讶的是,数据库文件大小仅增加了5%,这对我的目的来说也相当不错).
问题是,FTS3似乎不支持子串搜索,即如果我想在"foo bar"和"foobar"中找到"bar",我只会得到"foo bar",尽管我需要两个结果.
所以实际上我有两个问题:
是否有可能进一步加快查询速度?我的目标是查询30秒,但我不知道这是否真实......
如何使用FTS3进行真正的子串搜索?
是否存在使用JSON1扩展编译的Linux/Ubuntu的SQLite发行版.SQLite JSON1页面上的说明只解释了如何在编译后加载扩展 - 我想避免的题外话.