我有一个代表文件的CoreData对象的大集合。定期地,我需要搜索这个集合并查找存在于给定路径中的文件。目前,我正在构建以下NSPredicate并执行相当基本的executeFetchRequest以查找与我的查询匹配的所有结果。优化CoreData全文查询
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"path ==[c] %@", receivedPath];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Files" inManagedObjectContext:self.moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setPredicate:predicate];
[request setFetchBatchSize:10];
NSError *error = nil;
NSArray *results = [self.moc executeFetchRequest:request error:&error];
[request release];
我遇到的问题是,这个函数被调用亦常与executeFetchRequest被占的执行时间的百分比显著(仪器告诉我函数占了总计约49.2%,98.1%在executeFetchRequest调用上花费的总数)。我为我的持久性存储使用NSSQLiteStoreType
,并在我的MOM中索引了path
属性。
我的问题是,我该如何优化?我已经考虑设置一个lowercasePath属性,并且在比较中抛弃[c]修饰符,但我不确定在执行时会产生什么样的影响(如果有的话)。
任何帮助将不胜感激。
Mac或iOS?在Mac上,[Search Kit](http://developer.apple.com/library/mac/#documentation/UserExperience/Reference/SearchKit/Reference/reference.html)可能更适合全文搜索。 – omz
我为不提及而道歉。这是在Mac上。 – ndg