核心数据 - 使用谓词更好地搜索

Posted

技术标签:

【中文标题】核心数据 - 使用谓词更好地搜索【英文标题】:core data - better searching using predicates 【发布时间】:2011-07-23 23:16:57 【问题描述】:

在我的 Core Data 应用程序中,我有一个实体 Person(它有一个 fullname 属性)。搜索名称的最简单方法是通过字段进行谓词搜索:

[predicateArray addObject:[NSPredicate predicateWithFormat:@"fullname CONTAINS[cd] %@", searchString]];

但据我所知,这是一个可能很昂贵的正则表达式搜索,特别是如果您想启用实时搜索(即在您键入时搜索)并且列表非常大。有没有更好的方法来做这个搜索?你能以某种方式转换 fullName 以使其更快地搜索吗?

【问题讨论】:

您是否做过测试,看看在实时搜索中可以通过这种方式搜索多少个项目?我不确定,但根据以前的经验,我打赌超过 2000 件。您有超过 2000 项要搜索的项目吗? 因为它是一个联系人列表,它的平均值大约为 1000,但您可以想象有些人的列表更大(尤其是组织列表)。因此,如果可能的话,我希望它可以扩展到 10,000 个条目。 您打算将其连接到组合框吗? 【参考方案1】:

您可能对与此类似的方法感兴趣:

Core Data search optimization

基本上,您创建几个子搜索特定实体来优化前几个字符。

您可能还在谓词中寻找“开始于”而不是“包含”,人们在心理上很少通过姓名的中间字母来组织他们的联系人。他们通常首先为 Adam 或 Andy 等输入“A”,而不是“am”或“nd”。

【讨论】:

但如果他们只记得联系人的中间名或姓氏怎么办?在搜索结果中捕捉到这一点也很重要。 当然可以,但是您仍然想使用开头而不是包含。

以上是关于核心数据 - 使用谓词更好地搜索的主要内容,如果未能解决你的问题,请参考以下文章

xCode / iOS - 需要帮助使核心数据搜索谓词工作

核心数据和谓词

Xcode:使用复杂谓词过滤核心数据集

需要编写一个谓词来搜索核心数据对象数组属性中的日期(在我的例子中是日期数组)

子查询谓词核心数据

iOS 简单数组谓词