7

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

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

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

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

内容表- 具有以下列:ID、标题、内容、创建者、创建者、更改者、更改者等...

评论表- 具有以下列:ID、评论、创建者、创建时间、回复等...

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

在这里,我只想要标题、内容和评论的搜索功能。显然,我不需要其他列(如由等创建的列)上的搜索功能。

哪个是最好的选择?

  1. 我应该丢弃旧表并只创建 FTS 表吗?
  2. 我是否应该继续使用旧表并创建仅支持搜索功能的新 FTS 表。

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

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

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

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

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

4

1 回答 1

12

FTS 表无法有效地查询非 FTS 搜索,因此选项 1 不可用。

整个 FTS 表本质上是一个索引。这是速度/空间的权衡,而且进行全文搜索的能力通常是值得的。为避免两次存储原始文本,请使用外部内容表

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

于 2012-12-31T11:45:37.083 回答