Swift CoreData: плохая производительность NSSortDescriptor на очень большой базе данных - PullRequest
0 голосов
/ 08 января 2019

У меня есть серьезная проблема в проекте, использующем большие наборы данных (около 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 с, что недопустимо.

Какие-нибудь советы по этой проблеме?

...