1.前言
實現一個本地搜索引擎,允許容錯搜索,也就是搜索結果不需要和搜索的關鍵字完全精准匹配。比如,搜索”eric wang“,搜索結果可以包括Erica Watts等等。搜索效率十分高.
這里我們需要用到作者:Jerome Morissard的Lib,大家可以進我的github下載.
2.PermissiveResearch的使用
2.1.導入核心.h文件
2.2.在文本輸入控件發生變化時我們開始實現文本檢索
也就是在下面這個代理方法每次被調用時,我們開始檢索
2.3.需要檢索的數據倉庫初始化
#pragma mark 檢索數據倉庫初始化
/**
* 檢索數據初始化
*/
-(void)rebuildDatabase{
//你自己代碼里需要檢索的數據
NSArray *allmenus = self.mainDelegate.gbdata.objMenu.MenuItemArray;
//將自己代碼里需要檢索的數據對象添加進檢索數據倉庫,並且關聯上name
for (MenuItemObject *objmenu in allmenus) {
//第一個參數為你需要檢索的對象 obj ,第二個為你對象obj.name (例如根據 name.檢索)
[[PermissiveResearchDatabase sharedDatabase] addRetainedObjet:objmenu forKey:objmenu.displayname];
}
}
2.4.開始檢索
檢索十步走
//1.首先清空搜索結果數組
[self.arraySearchMenu removeAllObjects];
//2.將文本控制用戶輸入的字符進行簡單處理
NSString *final = [textField.text stringByReplacingCharactersInRange:range withString:string];
//3.開始檢索
NSLog(@"Start search by matrix");
//4.消除所有
[[ScoringOperationQueue mainQueue] cancelAllOperations];
//5.初始化
ExactScoringOperation *ope = [[ExactScoringOperation alloc] init];
//6.要檢索的字符串賦值
ope.searchedString = final;
//7.調用檢索block 返回檢索到的結果
SearchCompletionBlock block = ^(NSArray *results) {
dispatch_async(dispatch_get_main_queue(), ^{
//8.注意:這里統一檢索出來的對象 都是PermissiveObject
//你自己需要的檢索出來真在的對象是在PermissiveObject.refencedObject里
NSMutableArray *permissiveObj = [NSMutableArray arrayWithArray:results];
//9.取出檢索到你每個需要的數據 然后添加進檢索結果的數據
for (PermissiveObject *perobj in permissiveObj) {
MenuSearchObject *obj=[[MenuSearchObject alloc]init];
MenuItemObject *objMenu = perobj.refencedObject;
//測試log
NSLog(@"%@",objmenu.displayname);
obj.menuid=[NSNumber numberWithInteger:objMenu.menuid.integerValue];
[self.arraySearchMenu addObject:obj]; // add filter menu objection
}
//10.刷新顯示檢索結果的tableView
[self.searchTableview reloadData];
NSLog(@"End search by matrix");
});
};
//檢索完成
[ope setCustomCompletionBlock:block];
//添加操作 End.
[[ScoringOperationQueue mainQueue] addOperation:ope];
如果還有什么不明白歡迎在下面留言,有時間的我回一一回復,謝謝大家。
