【发布时间】:2016-02-02 11:05:44
【问题描述】:
我正在通过带有 BEGINSWITH 谓词的属性搜索 CoreData 实体。现在我想按相关性对结果进行排序,以便首先出现直接匹配项。
示例搜索字符串:
"star"
结果列表:
"star" # <- exact match should be first
"starship"
"stargazer"
我有一个这样的 CoreData 获取请求:
NSString *stringFromSearchField;
NSFetchRequest *fr =[NSFetchRequest fetchRequestWithEntityName:@"SearchWord"];
fr.predicate = [NSPredicate predicateWithFormat:@"(word beginswith %@)", stringFromSearchField];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Exact matches first, please..." ascending:YES];
fr.sortDescriptors = @[sortDescriptor];
我知道我可以将 NSFetchedResultsController 中的结果复制到一个可变数组中并在代码中排序,但如果可能的话,我想避免这种情况。
那么有什么办法可以存档吗?也许是数据模型或谓词技巧中的一些巧妙更改?
【问题讨论】:
-
我认为按长度排序应该可行。类似
"word.length" -
好的,那么当你尝试这样做时发生了什么?
-
它不是那样工作的。我稍后会调查,也许这只是语法。最坏的情况是我必须创建一个存储长度的列。
-
好的,所以它确实适用于我的情况。精确匹配是第一位的。我将汇总我自己的问题的答案。