Android搜索:使用FTS表和普通的SQLite数据库表

时间:2012-12-31 08:35:05

标签: android sqlite full-text-search

这更像是一个设计问题 - 而不仅仅是编码问题。

我已经有一个将数据存储在SQLite数据库表中的应用程序。现在我想在此添加搜索功能。

据我所知,为了启用搜索功能,我需要FTS表。

我拥有的表格(不完全相同,但给出了非常相似的例子):

内容表 - 包含以下列:Id,标题,内容,创建者,创建者,更改者,更改者等...

评论表 - 包含以下列:Id,评论,创建者,创建者,回复者等等。

其他表格,如用户数据,元数据,类别,标签等。

这里我只想要标题,内容和评论的搜索功能。显然,我不需要像其他列那样的搜索功能。

哪个是最佳选择?

  1. 我应该丢弃旧表并仅创建FTS表吗?
  2. 我应该继续使用旧表并创建仅支持搜索功能的新FTS表。
  3. 我在选项1中看到的问题是:

    • 这是一次颠覆性的改变!
    • 我有一组包含许多非文本列的多个表,我不打算在其中执行搜索。如何在FTS中对它们进行建模?
    • 现在我正在使用像Join等RDBMS的功能,如果我完全切换到FTS表,我认为我无法做到这一点!

    我在选项2中看到的问题是:

    • 这将导致重复的表 - 并且将消耗更多的内存/空间!
    • 每次在SQL表中插入/更新/修改条目时,我都必须在FTS表中进行相同的更改。

    那么,最好的选择是什么? 是否有任何机构面临类似的挑战?

1 个答案:

答案 0 :(得分:11)

对于非FTS搜索,无法有效查询FTS表,因此选项1已用完。

整个FTS表基本上都是一个索引。这是一个速度/空间权衡,并且进行全文搜索的能力通常是值得的。 要避免将原始文本存储两次,请使用external content tables

要使原始表和FTS表保持同步,请使用触发器。