面试题答案
一键面试处理搜索结果
- 排序:
Core Spotlight返回的搜索结果是一个
CSSearchableItemAttributeSet
数组。假设搜索结果存储在NSArray<CSSearchableItem *> *searchResults
中,可以根据CSSearchableItemAttributeSet
的某个属性进行排序,比如根据日期属性NSDate *date
排序:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSArray<CSSearchableItem *> *sortedResults = [searchResults sortedArrayUsingDescriptors:@[sortDescriptor]];
- 筛选:
同样对于
NSArray<CSSearchableItem *> *searchResults
,如果要筛选出标题中包含特定字符串的结果,假设CSSearchableItemAttributeSet
有NSString *title
属性:
NSArray<CSSearchableItem *> *filteredResults = [searchResults filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"title CONTAINS[c] %@", @"特定字符串"]];
优化搜索相关性
- 调整权重:
在创建
CSSearchableItemAttributeSet
时,可以设置不同属性的权重。例如,对于标题属性给予更高权重,内容属性给予较低权重:
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeText];
[attributeSet setTitle:@"文档标题" importance:CSSearchableItemAttributeSetImportanceHigh];
[attributeSet setContent:@"文档内容" importance:CSSearchableItemAttributeSetImportanceLow];
- 添加更多相关属性: 除了基本的标题和内容属性,添加更多与搜索相关的属性,例如文档作者、文档类型等,有助于提高搜索相关性。
[attributeSet setValue:@"作者姓名" forKey:@"author"];
[attributeSet setValue:@"文档类型" forKey:@"documentType"];
这样在搜索时,Core Spotlight会综合考虑这些属性,提高搜索结果的准确性。