【发布时间】:2014-08-03 09:32:25
【问题描述】:
我有一个图书应用,用户可以在其中浏览和搜索图书。
例如这是书籍列表:
“腐肉舒适”
“遮住她的脸”
“老人无国”
《猴子的雨衣》
我想实现一个行为如下的搜索机制:
如果用户搜索“co”,结果将是:
“Carrion Comfort”
“认识她的脸”
“老人没有合作”
你可以注意到我只想找到以“co”开头的单词,这就是为什么“猴子的雨衣”这本书虽然包含“co”却不在结果中
为此,我创建了一个名为 Token 的托管对象:
Token
------
normalizedString
我在 Book 对象中添加了一对多关系
Book
-----
title
releaseDate
tokens (to-many)
现在这就是我的搜索谓词的样子:
[NSPredicate predicateWithFormat:@"SUBQUERY(tokens, $token, $token.normalizedString BEGINSWITH[cd] %@).@count > 0", [searchString lowercaseString]];
如果我搜索单个单词,这很好用,例如,如果我搜索“她”,我会得到结果:
“捂脸”
但是当我尝试搜索多个单词时,例如“她的脸”,我没有得到任何结果。
我明白为什么会发生这种情况,但在这里找不到正确的解决方案。
任何帮助将不胜感激
【问题讨论】:
-
您显然想要的是 KWIK 索引。 (查一下。应该有几种算法被提出。)
-
在我看来,当你应该使用两块石头时,你却试图用同一块石头击中两只鸟。当您的用户点击空间时,您不再需要检查前缀,而只需要检查包含?
标签: ios objective-c search nspredicate