【发布时间】:2011-07-18 08:09:51
【问题描述】:
我需要我的 iPhone / iPad 应用程序能够快速搜索大约 10,000 条记录(每条记录大约相当于一段文本),以查找记录中包含的任何子字符串。因此,如果记录包含单词“Flame”,则查询“lame”应该匹配。
我目前正在使用 SQLite,但是“LIKE %term%”搜索对于这么多记录来说太慢了。启用全文搜索似乎不能完全满足我的需求,因为 SQLite 只支持前缀通配符(例如“Flam*”,而不是“*lame”)。
我已经尝试过使用一个巨大的文本块 (~350K),并执行 [NSString rangeOfString:...],我认为它使用了 Boyer-Moore 算法。这比“LIKE %term%”搜索要快,但仍然不是我希望的那种速度。
对于可以实现这种可扩展子字符串搜索并且适用于 iPhone 的方法或库有什么建议吗?
【问题讨论】:
-
我有一个类似的数据集/查询问题,我发现我必须使用 UI 和线程技巧来让它感觉响应。我在一个工作线程中进行了所有搜索,这将在用户键入时取消/重新运行搜索。我没有找到灵丹妙药。
-
感谢 NWCoder。我也考虑过这种异步方法。除此之外,您选择哪种方法进行搜索? LIKE 查询?
-
是的,我只能通过 LIKE 获得正确的结果。还有一点需要注意的是,我最终创建了一个简单的对象,其中只有可搜索的文本和一个引用对象扩展属性的 ID。在搜索特定版本中,我对文本进行了规范化(所有小写无标点符号等),它有所帮助,但作用不大。 (可能会提高 5-10% 的速度。)
标签: iphone ios search substring full-text-search