iOS- 如何建立索引實現本地文本搜索引擎,允許容錯搜索?


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.cnblogs.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
  
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM