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

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];
iOS- 如何建立索引实现本地文本搜索引擎,允许容错搜索?的更多相关文章
- 用Lucene4.5对中文文本建立索引
		
这里需要完成一个能对txt文本建立索引,并能完成检索查询.完成这个功能,使用的是Lucene4.5,同时使用其自带的中文分析器. 准备工作是在一个文件夹里面建一些txt文件,这是我的文件结构: 首先要 ...
 - 使用PHP+Sphinx建立高效的站内搜索引擎
		
1. 为什么要使用Sphinx 假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方 ...
 - Everything | 本地文件搜索引擎工具
		
文章目录 本地文件搜索软件 下载地址 注意 本地文件搜索软件 您是否觉得 Windows 自带的文件搜索比较慢?! 今天,给大家分享一款超快好用的本地文件搜索软件:Everything Search ...
 - Lucene建立索引搜索入门实例
		
第一部分:Lucene建立索引 Lucene建立索引主要有以下两步:第一步:建立索引器第二步:添加索引文件准备在f盘建立lucene文件夹,然后 ...
 - 开源 iOS 项目分类索引大全 - 待整理
		
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
 - lucene  建立索引的过程
		
时间 -- ::  CSDN博客 原文 http://blog.csdn.net/caohaicheng/article/details/ 看lucene主页(http://lucene.apach ...
 - solr中通过SFTP访问文件建立索引
		
需求: 从oracle数据库中根据记录的文件名filename_html(多个文件以逗号隔开),文件路径path,备用文件名bakpath中获取 主机172.21.0.31上对应的html文件内容,并 ...
 - ORACLE 全局索引和本地索引
		
Oracle数据库中,有两种类型的分区索引,全局索引和本地索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引.下面就分别看看每种类型的索引各自的特点. 全局索引以整个表的数据为对象建立索引,索引 ...
 - sqlite优化记录:建立索引加快查询速度
		
凡是数据库中,索引的存在就是为了提高查询速度的,数据库的索引有点类似于书本上面的目录的概念,因为在英文中都是index,事实上也就是目录. 其算法应该叫做“倒排索引”,这个其实也类似于搜索引擎里面的基 ...
 
随机推荐
- 20155212 实验二 Java面向对象程序设计
			
20155212 实验二 Java面向对象程序设计 单元测试 三种代码 用编程去解决问题,必须学会写三种码: 伪代码 产品代码 测试代码 例: MyUtil 类解决一个百分制成绩转成"优.良 ...
 - 20155234 2016-2017-2 《Java程序设计》第3 周学习总结
			
20155234 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 类是对象的设计图,对象是类的实例. 参考名称与对象数据成员同名时,可以在数据成员前使用thi ...
 - 20155317 2016-2017-2《Java程序设计》课程总结
			
20155317 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 新玮的首发博客:对师生关系的期望. C语言与java 20155317 王新玮第二次:语言掌握调查 ...
 - 自己在UWP程序上调用usb转串口的路程
			
之前一直是在普通的framework环境下写串口,使用的类为 SerialPort 这个类大家可能比较熟悉.但是在UWP的开发里,使用的是 SerialDevice 这个类,是不一样的. 1. 清单文 ...
 - struts常用知识
			
一,struts2是什么? struts2是一个控制框架,相当于连接底层和显示层,控制页面和数据展示 二,为什么用struts2? jsp+javabean模式:jsp里的小脚本java代码太多,页面 ...
 - Python中的对象引用、浅拷贝与深拷贝
			
最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用.赋值.浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念. 在Python的设计 ...
 - 创建Springmvc项目时,特殊拦截器失效情况的原因及解决办法
			
最近开发一个新项目时,搭建springmvc框架时,遇到一个拦截器失效的情况困扰了两天.现在解决,特此记录一下. 拦截器不生效的情况描述: 设置登录拦截的时候,首先登录接口肯定是不用拦截的.所以需要在 ...
 - PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
			
只要有人用了: select t.* from 表名 t where 字段=xxx for update 而不是: select t.rowid,t.* from 表名 t where 字段=x ...
 - 【实用】巧用For xml 生成HTML代码
			
可以利用SQL的For xml直接生成HTML结构,比如我想生成如下结构: <li> <img src="..."/> <input type=&qu ...
 - TW实习日记:第八天
			
今天早上主要是接着做昨天的微信端网页预览附件,听同事说当打包代码放入服务器上后,就不存在跨域问题了,也就懒得自己写接口了,那么就希望自己能一次过吧...结果写着写着,发现开发文档中关于预览文件的方法, ...