gpt4 book ai didi

ios - CoreData 搜索速度太慢

转载 作者:行者123 更新时间:2023-11-29 01:33:40 25 4
gpt4 key购买 nike

我正在开发一款可搜索 91,000 个条目的 iPhone 应用程序。我正在使用 CoreData,它工作得很好,只是创建数据表需要大约 2 秒。我已将其编程为在后台进行搜索,并添加了一个微调器,但用户体验仍然不理想。我尝试使用 FMDB,它运行良好但速度并不快。

本质上,我在 swift 中创建了我的 xcdatamodel,并向其中添加了我的条目,效果很好。 (以下代码是徒手打出来的,如有错别字请见谅)

然后我创建一个 NSFetchedResultsController:

let moc =(UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
searchText: String? = "name contains[c] \"seachText\""
nsfr = NSFetchRequest(entityName: "Example")
nsfr.fetchBatchSize = 20
nsfr.predicate = NSPredicate(format: searchText!)
nsfrc = NSFetchedResultsController(fetchRequest: nsfr, managedObjectContext: moc, sectionNameKeyPath: "section", cacheName: nil)

然后在我的 UITableViewController 类中(符合 NSFetchedResultsControllerDelegate):

nsfrc.delegate = self
nsfrc.performFetch()
self.tableView.reloadData()

有什么方法可以加快请求速度,比如哈希数据库吗?有什么方法可以将搜索范围缩小到单词的开头?我的数据包括数千个句子,我希望能够搜索其中的部分字符串。例如,“laz fo”应该找到“The lazy brown fox”。现在“azy own”也会找到字符串,这不是必需的。任何帮助,将不胜感激!即使将时间减半也很棒。

最佳答案

FRC 在处理 100K 条记录时应该表现良好。但是,字符串解析 开销很大,因此可能会出现性能问题,具体取决于您的数据。

您可以尝试通过将 CONTAINS 替换为 BEGINSWITH 来进行优化,尽管这只会匹配整个 name 字符串的开头。

或者,您可以创建一个新实体 Word 并将它们放入 Example 的一对多关系中(例如 titleWords)并使用像这样的谓词

NSPredicate(format: "ANY titleWords BEGINSWITH[c] %@", searchTerm)

关于ios - CoreData 搜索速度太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com