我正在开发一个必须在一个大表中执行子字符串搜索的 Android 应用程序(大约 500'000 个带有街道和位置名称的条目,所以每个条目只有几个词)。
CREATE TABLE Elements (elementID INTEGER, type INTEGER, name TEXT, data BLOB)
请注意,只有 20% 的条目在“名称”列中包含字符串。
执行以下查询几乎需要 2 分钟:
SELECT elementID, name FROM Elements WHERE name LIKE %foo%
我现在尝试使用 FTS3 来加快查询速度。那是相当成功的,查询时间减少到 1 分钟(令人惊讶的是数据库文件大小只增加了 5%,这对我的目的也很好)。
问题是,FTS3 似乎不支持子字符串搜索,即如果我想在“foo bar”和“foobar”中找到“bar”,我只会得到“foo bar”,尽管我需要这两个结果。
所以实际上我有两个问题:
是否可以进一步加快查询速度?我的目标是查询 30 秒,但我不知道这是否现实......
如何使用 FTS3 进行真正的子字符串搜索?