【发布时间】:2012-04-13 08:08:03
【问题描述】:
我正在尝试实现一种快速搜索即键入机制。
在我当前的实现中,当用户第一次启动应用程序时,他必须稍等片刻才能完成下载过程。在此期间,正在下载有关该应用程序销售的 20,000 种产品的信息。每个产品都由一个 NSManagedObject 实例表示,并被添加到 Core Data 数据库中。
真正的问题是使用这些产品的方式。用户再次启动应用程序(不是第一次)后,需要将产品加载到内存中,以便快速搜索。 为此,我遍历整个数据库并为每个包含其信息的产品创建一个 NSDictionary 实例,因为在我的程序中使用字典对象来检索有关产品的信息要容易得多。
因为字典存储在内存中,因此搜索过程非常快,但是迭代 20,000 个对象(每次启动一次)并创建字典需要很多时间(大约一分钟),因此解决方案不是不错。
我想到了另一种实现快速搜索目标的方法:在输入每个字母后从数据库中获取对象。但我不知道它会多快。
推荐的方法是什么?
谢谢, 萨吉夫特
【问题讨论】:
-
搜索是如何完成的?是按产品名称匹配的文本搜索吗?
-
搜索是使用 NSPredicate 完成的。搜索很复杂:除了搜索搜索的文本是否与产品名称匹配外,我还要检查搜索的文本是否与产品的制造商匹配,或者它是否包含有关产品尺寸、数量、价格等的信息。
-
您是否考虑在包含匹配关键字的可搜索实体上使用附加字符串属性?这将让您仅在该属性上查询匹配项,而不是在许多索引字段上。您可以在播种数据时填充该属性。
-
此外,在 Core Data 中查询 Unicode 文本非常耗时,因此如果您使用包含可搜索关键字的附加属性,请确保这些属性已标准化。此处示例:developer.apple.com/library/mac/ipad/#samplecode/…
标签: iphone database search core-data nsdictionary