问题 在iPhone上实现全文搜索?


我正在寻找关于在iPhone上对某些静态数据实施全文搜索的最佳方法的建议。

基本上我有一个包含网站离线版本的应用程序,大约50MB的文本,我希望用户能够搜索术语。我想我应该以某种方式建立一个表格 (“word”,reference_to_file_containing_word) 或其他东西,把它放入Core Data或只是sqlite,索引“word”列,然后让搜索工具在表中搜索搜索词,并获取术语或其他东西的结果集的交集。

这不会让人们搜索短语,但这很容易,也可能不会太慢​​。

我想为此使用现有的SDK功能。我应该使用Core Data还是sqlite?

有没有人对如何做到这一点有任何其他想法?


1752
2018-01-10 04:51


起源



答案:


您想将文档中的每个单词放在数据库中自己的行中吗?这将比文档本身占用更多的空间。

我建议只搜索文字;正则表达式实际上非常快。否则,你可以实施 博耶 - 穆尔 相当容易。

[编辑] 如果你坚持创建单词索引,你就无法击败 特里。它比使用数据库更快,并且最有可能占用比文档本身更少的空间(与数据库不同)


8
2018-01-10 05:05



谢谢!我想我会尝试首先使用regexps遍历所有文件然后如果这太慢我会尝试其他的东西。完成了与网络相关的编程后,我对尝试有些熟悉,但没想过将它们应用于单词而不是网络前缀。 - Nimrod


答案:


您想将文档中的每个单词放在数据库中自己的行中吗?这将比文档本身占用更多的空间。

我建议只搜索文字;正则表达式实际上非常快。否则,你可以实施 博耶 - 穆尔 相当容易。

[编辑] 如果你坚持创建单词索引,你就无法击败 特里。它比使用数据库更快,并且最有可能占用比文档本身更少的空间(与数据库不同)


8
2018-01-10 05:05



谢谢!我想我会尝试首先使用regexps遍历所有文件然后如果这太慢我会尝试其他的东西。完成了与网络相关的编程后,我对尝试有些熟悉,但没想过将它们应用于单词而不是网络前缀。 - Nimrod


答案是SQLite的FTS3。谷歌,有很多教程如何让它在iPhone上运行。

在iPhone上使用SQLite的简单方法是使用FMDB。


2
2018-04-27 02:32