我正在尝试搜索包含我的用户输入的搜索文本的CloudKit记录。
我有这些标题的记录(字符串格式):
我尝试过使用'包含':
let predicate = NSPredicate(format: "self contains %@", searchText)
let query = CKQuery(recordType: "ShareableItem", predicate: predicate)
publicDatabase.perform(query, inZoneWith: nil) { results, error in
...
但是这只会返回我正在寻找的结果,如果我使用完整的单词作为搜索词。
EG。如果我搜索'项目',我会回到第1项,第2项和第3项,但是如果我搜索' tem'我没有得到任何结果。
有没有办法在搜索中包含通配符或使用部分搜索文本的其他方式?
我也尝试过:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)
但结果相同
答案 0 :(得分:2)
您只能从字段的开头搜索部分文本。例如,您可以使用:
NSPredicate(format: "YourTextField BEGINSWITH %@", searchText)
令牌匹配查询中搜索记录中的标记(单词)。它总是会搜索完整的单词。到目前为止,我只找到了一个针对此问题的解决方法,即您在要搜索的字段中生成一个额外的字段,其中包含您可以生成的所有部分标记。例如,如果您的字段包含文本search text
,那么您将生成包含s se sea sear searc e ea ear earc earch a ar arc arch r rc rch c ch t te tex e ex ext x xt
的令牌字段。然后将所有这些都视为单独的令牌。