ios - iOS 上的 FTS3 或 FTS4 入门

标签 ios sqlite full-text-search

我们的数据库中有几个表,我们在 iOS 上使用 LIKE 进行搜索。数据增长得越大,速度就越慢。我直接转向 FTS3/FTS4,并阅读了一些文档。我有点不确定如何开始。 (如果我的陈述不正确并且我误解了文档中的某些内容,请纠正我)。听起来虚拟表只是一个不存储在磁盘上的表。因此,如果我们当前使用 LIKE 搜索 4 列,我是否创建 4 个虚拟表,将原始表中的条目插入到新虚拟表之一的行中,然后在我通常在该列上搜索的情况下,使用 MATCH 语法在新的虚拟表中搜索,如果到目前为止该部分是正确的,我有点陷入下一步该做什么。因为我需要查找原始表以获取与该行关联的其余列。

或者人们是否将整个数据库的副本创建到虚拟表中并以这种方式获取信息?谢谢!

最佳答案

虚拟表不直接存储在磁盘上,但它们通常使用几个内部“普通”表来实际存储数据,并且只是更改数据的访问方式。 (参见Shadow Tables)

您可以将多个文本列放入一个 FTS 表中,并且 search either one or all of them :

Normally, a token or token prefix query is matched against the FTS table column specified as the left-hand side of the MATCH operator. Or, if the special column with the same name as the FTS table itself is specified, against all columns.

FTS 表 are not able to do 'normal' queries efficiently ,所以您可能仍然需要原来的表。 FTS 表的 docid 列通常是原始表的主键。

如果您的原始表格也包含所有文本,您可以使用 external content FTS table以节省一些空间。

关于ios - iOS 上的 FTS3 或 FTS4 入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779882/

相关文章:

python - 使用 Python 和 SQLite 的登录脚本

php - laravel全文搜索多个关键字在一起

postgresql - 如何使 tsquery 执行部分匹配?

android - 访问短信移动应用程序

ios - 具有多个自定义单元格类型的 RxSwift TableView

ios - 如何在 Swift 4 中为 UIImage 约束设置动画

ios - 如何使用静态库从 iOS 框架声明 libc++.dylib 依赖项

ios - 合并两个 sqlite3 查询

android - 将数据库从 Assets 文件夹复制到数据库文件夹

python - 搜索API : snippeted_fields option return error UnboundLocalError: local variable 'prev_len' referenced before assignment