【发布时间】:2015-06-26 02:55:01
【问题描述】:
在阅读了 SQLite3 的 FTS3/FTS4 文档的第一部分后,我感到非常困惑。我感到困惑的原因是分散在网络上的示例,我认为它并没有涵盖所有可能的用例,另一个原因是我目前所处的情况。话虽如此,我有一个名为 Note 的表,其中包含两个类型为 TEXT 的属性和其他对整个应用程序非常重要的属性。
这是一个非常简单的表格。我想提供全文搜索,这样我就可以同时搜索短笔记和长笔记,这就是我遇到这个 FTS3/FTS4 的时候。您会看到,这样存储信息很简单,但我在设计上遇到了问题,尤其是在我的应用程序引擎盖下发生的任何事情。网络上的示例,尤其是 sdk 目录中提供的 SearchableDictionary 示例,仅显示了虚拟表的创建,实际上仅此而已。这不是真的,对我来说也是如此。我已经有一个现有的表,它的其他属性对应用程序非常重要,我永远不会打算将它们作为文本存储在虚拟表上!也没有类型都是 TEXT 的单个虚拟表。我可以将 ShortNote 和 LongNote 分开到一个单独的虚拟表中,并通过以下方式进行 fts:
create virtual table virtual_note_table using fts3(_ID, ShortNote, LongNote);
出于以下几个原因,我对这种方法感到不舒服:
如果我这样做,我将不得不维护两个表,a) 易于理解的普通 SQLite 表,b) 虚拟表,在我的情况下,我对它的工作方式知之甚少。
我在想的只是创建一个单独的虚拟表,并在我要进行搜索时将其填满,并在我结束时删除表。内容的来源将来自我已经拥有的表格。但我不确定这是否是最好的处理方式,因为我担心空间开销。
假设我采取了我之前的原始想法,即从笔记表中完全删除 ShortNote 和 LongNote,只保留一个参考。似乎根本不可能将虚拟表连接到非虚拟表。这是一个糟糕的概念,我从来没有看过任何文章或写过这方面的文章,所以也许我完全误解了 FTS3/FTS4 虚拟表!
我完全迷失了,需要有关设计的帮助。我非常需要完全搜索数据的功能(ShortNote 和 LongNote)。我认为我最好的投篮是#2。
如果有任何建议,我将不胜感激。
【问题讨论】:
标签: android sqlite full-text-search