Skip to content

索引全文搜索

福昕 PDF SDK iOS 版通过 Core SDK 提供了跨文档的索引全文搜索功能。该功能先对多个 PDF 文档建立全文索引,然后基于索引进行快速搜索,适用于需要在大量文档中查找内容的场景。

核心类

说明
FSFullTextSearch全文搜索引擎,负责建立索引和执行搜索
FSDocumentsSource文档来源,指定要索引的文档集合
FSSearchCallback搜索结果回调协议,每找到一个匹配项时回调

搜索排名模式

常量说明
FSFullTextSearchRankModeNone无排名
FSFullTextSearchRankModeHitCount按命中次数排名

示例:建立索引并搜索

第 1 步:创建全文搜索引擎并设置索引数据库路径

objc
#import <FoxitRDK/FSPDFObjC.h>

FSFullTextSearch *fullTextSearch = [[FSFullTextSearch alloc] init];

// 设置索引数据库存放路径
NSString *dbPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                    NSUserDomainMask, YES).firstObject
                    stringByAppendingPathComponent:@"search_index"];
[fullTextSearch setDataBasePath:dbPath];

第 2 步:建立/更新索引

objc
// 对单个文件更新索引
[fullTextSearch updateIndexWithFilePath:@"path/to/Sample.pdf"];

也可以对一批文档异步建立索引:

objc
FSDocumentsSource *source = ...; // 配置文档来源

FSProgressive *progressive = [fullTextSearch startUpdateIndex:source
                                                       pause:nil
                                                    reupdate:NO];

FSProgressiveState state = [progressive resume];
while (state == FSProgressiveToBeContinued) {
    state = [progressive resume];
}

if (state == FSProgressiveFinished) {
    NSLog(@"索引建立完成");
}

第 3 步:执行搜索

实现 FSSearchCallback 协议来接收搜索结果:

objc
@interface MySearchCallback : NSObject <FSSearchCallback>
@end

@implementation MySearchCallback

- (int)retrieveWithFile_path:(NSString *)filePath pageIndex:(int)pageIndex
                 matchResult:(NSString *)matchResult matchStartCharIndex:(int)matchStartCharIndex
             matchEndCharIndex:(int)matchEndCharIndex {
    NSLog(@"在文件 %@ 的第 %d 页找到: %@", filePath, pageIndex, matchResult);
    return 0; // 返回 0 继续搜索,非 0 停止搜索
}

@end

执行搜索:

objc
MySearchCallback *callback = [[MySearchCallback alloc] init];
BOOL result = [fullTextSearch searchOf:@"搜索关键词"
                             rank_mode:FSFullTextSearchRankModeNone
                              callback:callback];

注意

索引全文搜索需要先建立索引数据库,首次索引可能需要较长时间,建议在后台线程执行。索引数据库建立后,后续搜索将非常快速。

API 参考

FSFullTextSearchFSSearchCallback 的完整接口说明请参阅 API 手册