Android 理解FTS3/FTS4:什么是虚拟表,从中搜索具有可搜索的非虚拟表?

Android 理解FTS3/FTS4:什么是虚拟表,从中搜索具有可搜索的非虚拟表?,android,sqlite,full-text-search,Android,Sqlite,Full Text Search,阅读了SQLite3的FTS3/FTS4文档的第一部分后,我感到非常困惑。我之所以感到困惑,是因为这个例子散布在网络上,我相信它并没有涵盖所有可能的用例,另一个原因是我所处的现状。话虽如此,我有一个名为Note的表,其中包含两个属性,其类型为TEXT和其他属性,这对整个应用程序非常重要 这是一张非常简单的桌子。我想提供一个全文搜索,这样我就可以同时搜索短注释和长注释,这就是我遇到这个FTS3/FTS4的时候。你看,存储这样的信息很简单,但我对设计有问题,尤其是在我的应用程序的引擎盖下发生的事情。

阅读了SQLite3的FTS3/FTS4文档的第一部分后,我感到非常困惑。我之所以感到困惑,是因为这个例子散布在网络上,我相信它并没有涵盖所有可能的用例,另一个原因是我所处的现状。话虽如此,我有一个名为Note的表,其中包含两个属性,其类型为TEXT和其他属性,这对整个应用程序非常重要

这是一张非常简单的桌子。我想提供一个全文搜索,这样我就可以同时搜索短注释和长注释,这就是我遇到这个FTS3/FTS4的时候。你看,存储这样的信息很简单,但我对设计有问题,尤其是在我的应用程序的引擎盖下发生的事情。web上的示例,特别是sdk目录中提供的SearchableDictionary示例,只显示了虚拟表的创建,实际上没有其他内容。这不是事实,对我来说也是如此。我已经有一个表,它的其他属性对应用程序非常重要,我永远不会计划将它们作为文本存储在虚拟表上!也没有类型均为文本的单个虚拟表。我可以将ShortNote和LongNote分离到单独的虚拟表中,并通过以下方式在此处进行fts:

create virtual table virtual_note_table using fts3(_ID, ShortNote, LongNote);
出于以下几个原因,我对这种方法感到不舒服:

  • 如果我这样做,我将不得不维护两个表,a)普通的SQLite表,它很容易理解,b)虚拟表,在我的情况下,我对它如何工作知之甚少

  • 我想的只是创建一个单独的虚拟表,当我要进行搜索时填充它,当我结束时删除该表。内容的来源将来自我已经有的表格。但我不确定这是否是最好的方式,因为我担心头顶的空间

  • 假设我采用了我以前的原始想法,即从note表中完全删除ShortNote和LongNote,只保留一个引用。似乎根本不可能将虚拟表连接到非虚拟表。这是一个糟糕的概念,我从来没有看过任何关于这方面的文章或文章,所以我可能完全误解了FTS3/FTS4虚拟表

  • 我完全迷路了,在设计方面需要帮助。我迫切需要的功能是完全搜索数据(短音符和长音符)。我想我最好的射门是#2

    如果有任何建议,我将不胜感激。

    将所有文本复制到(临时)FTS表将相当缓慢

    为了避免在两个表中存储重复文本的开销,可以使用


    要使两个表中的数据保持同步,可以使用触发器;请参阅上面的链接以获取示例。

    是的,因为我担心它会很慢。我将阅读有关外部内容的链接,并感谢您的指导。fts4的外部内容表是否适用于android中的sqlite?您好,几周前我已将此问题添加到书签中。也许它会给你一些你需要的信息:它似乎在API>=11上默认启用。查看链接。API 16是否支持外部内容表?我试图用API 16在Sony Xperia上运行它,结果它崩溃了,出现错误
    vtable constructor失败