首页 > 学院 > 开发设计 > 正文

iOS-如何建立索引实现本地文本搜索引擎,允许容错搜索?

2019-11-14 18:58:58
字体:
来源:转载
供稿:网友

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];

 

如果还有什么不明白欢迎在下面留言,有时间的我回一一回复,谢谢大家。
 
 
作者: 清澈Saup
出处: http://www.VEVb.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。
  
 
 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表