我正在通过带有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中的结果复制到一个可变数组中并在代码中排序,但我想尽可能避免这种情况。
那么有什么方法可以存档吗?也许数据模型中的一些聪明的变化或谓词技巧?
答案 0 :(得分:0)
我找到了一种方法来做到这一点。我在这里找到了一个提示:https://stackoverflow.com/a/31316010/921573
诀窍是按长度排序。完全匹配必然具有最小长度值 所以我的排序描述符如下所示:
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"word.length"
ascending:YES];