在一个使用大型数据集(大约13Gb)的项目中,我遇到了一个主要问题,我需要在其上实现全文搜索。最初,我在请求中使用搜索词 CONTAINS [cd] 进行搜索时性能很差,但最终通过在Swift对象而不是Core Data发送的SQL查询中进行搜索来解决了这一问题。我现在的问题是使用NSSortDescriptor来组织我的结果。
这是我的要求:
let fetchRequestEntity = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")
fetchRequestEntity.predicate = NSPredicate(format: "entityRelated.stringAttribute != \"\" AND entityRelated.foreignId = %@", foreignId, searchTerm)
fetchRequestEntity.propertiesToFetch = ["entityId"]
fetchRequestEntity.returnsDistinctResults = true
fetchRequestEntity.fetchLimit = 1
let sort = NSSortDescriptor(key: #keyPath(Entity.entityRelated.stringAttribute), ascending: true)
fetchRequestEntity.sortDescriptors = [sort]
fetchRequestEntity.fetchOffset = fetchOffset+nbOffset
然后我重复此请求,直到得到N个结果(此处N = 20)。
如果不进行排序,则对某个搜索词的20个结果收取不到0.5s的费用,但是对于排序,大约需要16s,这是不可接受的。
有关此问题的任何提示吗?