在 CoreData 的文本字段中搜索词组

Search group of words in text field in CoreData

我正在实施一个 iOS 应用程序,其中包含一个 CoreData 数据库,其中一列包含文本字段,用户应该在该文本字段上执行多种类型的搜索(语义、精确匹配等)选项)。现在,我一直在尝试实现以下 MySQL 查询(Python 实现):

'''select * from quotes where match section against ('\"%s\"' in boolean mode) ''' % (query)

以上查询returns包含所有字符串“query”的单词的所有文本行,没有任何特定的顺序,只要文本字段包含所有的话。例如,诸如“明天是星期六”的查询应该在包含句子“星期六 我们要去某处的字段中找到匹配项。明天是星期五。

我尝试了一些方法,例如 NSPredicate 和正则表达式。我无法在 CoreData 中找到与 MySQL 布尔模式的直接匹配,但到目前为止我能实现的最好结果是将正则表达式与 NSPredicate 结合使用,例如:

let queryArray = query.components(separatedBy: " ")
let regex = ".*\b(" + queryArray.map {
    NSRegularExpression.escapedPattern(for: [=11=])
}.joined(separator: "|") + ")\b.*"
let predicate = NSPredicate(format: "textField MATCHES %@", regex)

但是,此查询返回包含初始查询中的一个或多个单词的任何 textField 行,这不是我想要的结果。

我怎样才能在 CoreData 中获得想要的结果?

对于那些可能会卡住的人,NSCompoundPredicate 帮了我大忙,只需创建一个谓词数组,其中 NSPredicate 实例正在寻找字符串中的单词之一,忽略大小写并将 NSCompoundPredicate 应用于 NSFetchRequest .