Coredata谓词用于以任意出现顺序匹配具有多个单词的列中的字符串

时间:2019-01-23 09:46:34

标签: ios swift core-data nspredicate

我想写一个CoreData谓词来检查一列中有多少条记录与输入的任何关键字相匹配,而与它们出现的顺序无关。


例如。假设我有一条记录“这是我要比较的测试字符串”,现在如果我搜索“测试我的比较”,它应该返回该记录。

我尝试过使用单词分开,并对每个单词使用CONTAINS并进行OR ed,但是由于数据库中有15000多个记录,结果要花很多时间。

请帮助。

1 个答案:

答案 0 :(得分:0)

Create为字符串中的每个单词包含predicate,并使用AND类型的NSCompoundPredicate

 let string = "test my compare"
     var pridicateArray : [NSPredicate]!
     for word in string.components(separatedBy: " ") {
            let newPredicate = NSPredicate(format: "YOUR_ENTITY contains[c] %@", word)
            pridicateArray.append(newPredicate)
     }
   let andPredicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.and, subpredicates: pridicateArray)