iOS输入字符串略有不同(容错搜索)

iOS输入字符串略有不同(容错搜索),ios,objective-c,core-data,search-engine,Ios,Objective C,Core Data,Search Engine,我想处理一些来自用户键盘输入的小错误(这是一个概念阶段,所以我还没有任何组件,所以请随意推荐一个) 假设我有一个包含1000个输入的CoreData实体。我只想搜索一个属性。我需要类似于UIFetchedResultController中的行为(这可能是一个,但我也可以模拟它的行为) 再次登录后,让我们假设这是一个包含属性name的水果实体,用户正在搜索它。他想搜索banana,但他错误地输入了bansna(或vanana)。我还想给他看“香蕉”阶段 我该怎么做?可以使用NSPredicate?

我想处理一些来自用户键盘输入的小错误(这是一个概念阶段,所以我还没有任何组件,所以请随意推荐一个)

假设我有一个包含1000个输入的
CoreData
实体。我只想搜索一个属性。我需要类似于
UIFetchedResultController
中的行为(这可能是一个,但我也可以模拟它的行为)

再次登录后,让我们假设这是一个包含属性
name
的水果实体,用户正在搜索它。他想搜索
banana
,但他错误地输入了
bansna
(或
vanana
)。我还想给他看“香蕉”阶段

我该怎么做?可以使用
NSPredicate
?我能操纵这种“宽容”吗


我早期使用了1000个条目,我假设搜索速度取决于这个容差和数据库大小。因此,也许我应该从移动服务转向REST服务?也在这里寻找建议。

将谓词写为:
在哪里,名字像“?anana”或名字像“v?nana”或名字像“va?ana”或名字像“van?na”或名字像“vana”
将谓词写为:
在哪里,名字像“?anana”或名字像“v?nana”或名字像“va?ana”或名字像“van?na”或名字像“vana?a”或“vanan”之类的名称。

核心数据提取请求不支持“容错”搜索。可用的 字符串的比较运算符是

  • ==
    精确相等
  • 包含
    开始于
    结束于
    用于子字符串搜索
  • LIKE
    用于简单的通配符匹配
  • 匹配用于正则表达式搜索的
但对于“容错”搜索,您需要一些高级比较算法,如 ,可用于确定 如果一个字符串“接近”另一个字符串(可能还有更多的算法)

因为核心数据获取请求不能使用“基于Objective-C”的谓词 (例如
predicateWithBlock
),这意味着您必须获取所有对象和
然后应用容错比较方法。

核心数据获取请求不支持“容错”搜索。可用的 字符串的比较运算符是

  • ==
    精确相等
  • 包含
    开始于
    结束于
    用于子字符串搜索
  • LIKE
    用于简单的通配符匹配
  • 匹配用于正则表达式搜索的
但对于“容错”搜索,您需要一些高级比较算法,如 ,可用于确定 如果一个字符串“接近”另一个字符串(可能还有更多的算法)

因为核心数据获取请求不能使用“基于Objective-C”的谓词 (例如
predicateWithBlock
),这意味着您必须获取所有对象和
然后应用容错比较方法。

这是一个非常好的答案。我还想说的是,包含和匹配在性能方面有很大的成本。很好的答案!非常感谢。感谢“容错搜索”这个词对挖掘更多信息非常有用。@Kuba:不客气!您可以尝试的其他搜索术语是“模糊(或近似)字符串匹配”。这是一个非常好的答案。我还想说的是,包含和匹配在性能方面有很大的成本。很好的答案!非常感谢。感谢“容错搜索”这个词对挖掘更多信息非常有用。@Kuba:不客气!您可以尝试的其他搜索词是“模糊(或近似)字符串匹配”。