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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.前言实现一个本地搜索引擎,允许容错搜索,也就是搜索结果不需要和搜索的关键字完全精准匹配。比如,搜索”eric wang“,搜索结果可以包括Erica Watts等等。搜索效率十分高.

这里我们需要用到作者:Jerome Morissard的Lib,大家可以进我的github下载.

https://github.com/SaupClear/qingchegithub

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.cnblogs.com/qingche/

本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航