У меня есть серьезная проблема в проекте, использующем большие наборы данных (около 13 Гб), и мне нужно реализовать полнотекстовый поиск по нему. Изначально у меня были очень плохие показатели при поиске с использованием поискового слова CONTAINS [cd] в моих запросах, но я, наконец, справился с этим, выполнив поиск в объекте Swift, а не в запросе SQL, отправленном Core Data. Моя проблема сейчас заключается в использовании 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,5 с, но с сортировкой - около 16 с, что недопустимо.
Какие-нибудь советы по этой проблеме?