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

Posted

技术标签:

【中文标题】用于以任何出现顺序匹配具有多个单词的列中的字符串的 Coredata 谓词【英文标题】:Coredata predicate for matching strings in columns with multiple words in any order of occurrence 【发布时间】:2019-01-23 09:46:33 【问题描述】:

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

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

我尝试使用分隔单词并为每个单词使用 CONTAINSORed ,但由于 db 中有超过 15000 条记录,因此需要很长时间才能得出结果。

请帮忙。

【问题讨论】:

带有 CONTAINS 的谓词? 您目前使用什么谓词?获取正确的语法以及让 fetch 有效运行的问题是什么? 【参考方案1】:

为字符串中的每个单词创建包含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)

【讨论】:

以上是关于用于以任何出现顺序匹配具有多个单词的列中的字符串的 Coredata 谓词的主要内容,如果未能解决你的问题,请参考以下文章

包含多个世界的列中的全文搜索搜索

MYSQL-命令用于具有相同id的列中的复制值

在字符串中查找与字典中的值匹配的单词,然后在新列中返回键

将具有多个 char(13) 换行符的列中的数据分离到它们自己的列中

用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界

以任何顺序匹配查询中的所有单词的正则表达式