ファイルを表す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は(インスツルメンツは98.1パーセントと、関数は合計で約49.2パーセントを占めて私に指示、実行時間のかなりの割合を占めていますexecuteFetchRequest呼び出しで費やされた合計の合計)。私は永続的なストアのためにNSSQLiteStoreType
を使用していて、path
の属性が私のMOMにインデックスされています。
私はこれをどのように最適化できますか?私はlowercasePath属性を設定することを考えていましたが、比較に[c]修飾子を控えていましたが、実行時にどのような影響があったかはわかりません。
ご協力いただければ幸いです。
MacまたはiOS? Macでは、[検索キット](http://developer.apple.com/library/mac/#documentation/UserExperience/Reference/SearchKit/Reference/reference.html)はおそらくフルテキスト検索を行うのに適しています。 – omz
私は言及していないことをお詫び申し上げます。これはMac上にあります。 – ndg