如何在CloudKit记录中搜索部分单词?

时间:2017-01-12 12:37:19

标签: ios swift cloudkit

我正在尝试搜索包含我的用户输入的搜索文本的CloudKit记录。

我有这些标题的记录(字符串格式):

  • 第1项
  • 第2项
  • 第3项
  • 测试1
  • 测试2

我尝试过使用'包含':

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)

但结果相同

1 个答案:

答案 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的令牌字段。然后将所有这些都视为单独的令牌。