Я пытаюсь создать текстовый поисковый запрос CloudKit. Что делает работу является запрос для записи, которая начинается с поиска текста, как это:Как сделать полнотекстовый поиск CloudKit, который включает в себя поиск токенов
NSPredicate(format: "Text BEGINSWITH %@", searchText)!
Маркер поиска также работает (запрос, чтобы увидеть, если один из введенных слов где-то в записи), как это:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)!
Вы можете увидеть эти запросы, работающие в демо-приложение выключено EVCloudKitDao (см скриншоты)
Но теперь я хотел бы объединить эти 2 запросы так, чтобы результаты чувствовать себя немного более полной. Я попытался с помощью этого запроса:
NSPredicate(format: "Text BEGINSWITH %@ OR allTokens TOKENMATCHES[cdl] %@", searchText, searchText)!
Но тогда я получаю эту ошибку CloudKit:
Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: Text BEGINSWITH "Y" OR allTokens TOKENMATCHES[cdl] "Y"'
Кроме того, я также попробовал NSCompoundPredicate так:
var p1 = NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)!
var p2 = NSPredicate(format: "Text BEGINSWITH %@", searchText)!
var p = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [p1, p2])
Но что один дает примерно такая же ошибка:
Terminating app due to uncaught exception 'CKException', reason: 'Unexpected expression: allTokens TOKENMATCHES[cdl] "y" OR Text BEGINSWITH "y"'
Странно, что он работает при использовании AndPredicateType вместо OrPredicateType
Кто-нибудь знает альтернативное решение для такого запроса? Поскольку это функция автозаполнения, выполнение 2 запросов и объединение результатов не является реальным вариантом.
Вы пытались использовать NSCompoundPredicate вместо этого? –
Спасибо за подсказку. К сожалению, он имеет тот же результат. Похоже, что существует проблема с использованием OR в предикатах. –