Применить sortDescriptor к NSFetchRequest после группировки

Я строю выставочный зал, в котором более 45000 каталогов, каждый из которых представлен в виде Literature в CoreData.

Оптимизировать поиск - вместо поиска LiteratureЯ добавил еще одну сущность - LiteratureSearchIndex в CoreData, который имеет searchvalue (либо заглавное слово / ключевое слово / тег и т. д., представляющее часть литературы), score (чтобы оценить результаты) и literatureid,

Когда пользователь вводит что-то в поиске или фильтрует - я делаю fetchRequest для LiteratureSearchIndex, группирую результаты и сортирую их по общему количеству баллов.

        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "LiteratureSearchIndex")
        let entityDescription = NSEntityDescription.entity(forEntityName: "LiteratureSearchIndex", in: moc)

        let sumDescription = NSExpressionDescription()
        sumDescription.name = "totalScore"
        sumDescription.expression = NSExpression(forFunction: "sum:", arguments: [NSExpression(forKeyPath: "score")])
        sumDescription.expressionResultType = .integer64AttributeType

        if let literatureid = entityDescription?.attributesByName["literatureid"] {
            request.propertiesToGroupBy = [literatureid]
            request.propertiesToFetch = [literatureid, sumDescription]
            request.havingPredicate = NSPredicate(format: "%@ >= %@", NSExpression(forVariable: "totalScore"), NSNumber(value: minScore))
        }

        request.predicate = ... 
        request.resultType = .dictionaryResultType
        request.fetchBatchSize = 50

В настоящее время я сортирую результаты после moc.fetch() следующим образом:

                results.sort(by: { (a: [String: Any], b: [String: Any]) -> Bool in
                    if let aTotalScore = a["totalScore"] as? Int, let bTotalScore = b["totalScore"] as? Int {
                        return aTotalScore > bTotalScore
                    } else {
                        return true
                    }
                })

Есть ли лучший / более быстрый способ сортировки результатов (аналогично применению havingPredicate над массивом словарей)?

0 ответов

Другие вопросы по тегам