ios - 在 CoreData 的文本字段中搜索单词组
问题描述
我正在实现一个 iOS 应用程序,该应用程序包含一个 CoreData DB,其中一个列包含一个文本字段,用户应该在其上执行多种类型的搜索(语义、完全匹配等选项)。现在,我一直在尝试实现以下 MySQL 查询(Python 实现):
'''select * from quotes where match section against ('\\"%s\\"' in boolean mode) ''' % (query)
上面的查询返回包含字符串“query”的所有单词的所有文本行,没有任何特定的顺序,只要文本字段包含所有单词。例如,“明天是星期六”这样的查询应该在包含“星期六我们要去某个地方。明天是星期五”的字段中找到匹配项。
我尝试了一些方法,例如 NSPredicate 和正则表达式。我在 CoreData 中找不到与 MySQL 布尔模式的直接匹配,但到目前为止我能做到的最好的方法是将正则表达式与 NSPredicate 一起使用,例如:
let queryArray = query.components(separatedBy: " ")
let regex = ".*\\b(" + queryArray.map {
NSRegularExpression.escapedPattern(for: $0)
}.joined(separator: "|") + ")\\b.*"
let predicate = NSPredicate(format: "textField MATCHES %@", regex)
但是,此查询返回包含初始查询中的一个或多个单词的任何 textField 行,这在我的情况下不是所需的结果。
如何在 CoreData 中实现预期的结果?
解决方案
对于那些可能会卡住的人,NSCompoundPredicate 为我解决了问题,只需创建一个谓词数组,其中哪个 NSPredicate 实例正在查找字符串中的一个单词,忽略大小写并将 NSCompoundPredicate 应用于 NSFetchRequest。
推荐阅读
- ruby-on-rails - 升级 ruby 后得到:找不到符号:__ZN6libdap5ErrorD1Ev
- opencv - 我应该如何在 cv::cuda::GpuMat 上创建这样的掩码?
- python - 按自定义值对 Pandas 数据框进行排序
- python - 替换 yaml 文件 python 中的标记
- git - Git:推送文件未显示在 GitHub 上
- javascript - 正则表达式将新行“\n”减少 1
- windows - 如何查找文件夹结构中不存在的特定字符串
- c# - 如何为已创建的每个订单分配不同的送货司机?
- video - 无法使用 ffmpeg/libav 将 AVPacket 端数据写入 mp4 文件
- java - 如何在不删除和添加 Mapbox 图层的情况下更改 SymbolLayer 的 Z 值?