Skip to content

索引全文检索

福昕 PDF SDK 安卓版通过 Core SDK 提供了索引全文检索能力(Full Text Search),可对离线目录中的多份 PDF 文件建立索引数据库,然后基于索引进行高效的关键字检索。适用于需要跨文件批量搜索的场景。

核心类

说明
FullTextSearch全文检索入口对象,负责索引管理和执行检索
DocumentsSource文档来源,指定需要索引的目录路径(会递归遍历子目录)
SearchCallback检索结果回调,重写 retrieveSearchResult() 接收每条匹配结果

排序方式常量

常量说明
e_RankNone0不排序,按文件遍历顺序返回
e_RankHitCountASC1按命中次数升序排列
e_RankHitCountDESC2按命中次数降序排列

基本流程

  1. 创建 DocumentsSource 指定扫描目录
  2. 创建 FullTextSearch 并通过 setDataBasePath() 设置索引数据库路径
  3. 调用 startUpdateIndex() 建立或更新索引(返回 Progressive,支持渐进式执行;reUpdatetrue 时重建全部索引)
  4. 调用 searchOf() 执行检索,结果通过 SearchCallback.retrieveSearchResult() 逐条回调

SearchCallback 回调

继承 SearchCallback 并重写以下方法接收每条匹配结果:

java
public int retrieveSearchResult(
    String filePath,                    // 匹配结果所在的文件路径
    int pageIndex,                      // 所在页码
    String matchResult,                 // 匹配到的文本
    int matchStartTextIndex,            // 起始字符索引
    int matchEndTextIndex,              // 结束字符索引
    String sentence,                    // 所在完整语句
    int matchSentenceStartTextIndex,    // 语句起始字符索引
    int matchSentenceEndTextIndex       // 语句结束字符索引
)

返回 0 表示继续检索,返回非零值中止检索。

完整示例

java
import com.foxit.sdk.fts.FullTextSearch;
import com.foxit.sdk.fts.DocumentsSource;
import com.foxit.sdk.fts.SearchCallback;
import com.foxit.sdk.common.Progressive;
import com.foxit.sdk.common.fxcrt.PauseCallback;

FullTextSearch search = new FullTextSearch();
search.setDataBasePath("/sdcard/fts_index_db");

DocumentsSource source = new DocumentsSource("/sdcard/PDFDocuments");

// 建立索引
PauseCallback pause = new PauseCallback() {
    @Override
    public boolean needToPauseNow() { return false; }
};
Progressive progressive = search.startUpdateIndex(source, pause, false);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
    state = progressive.resume();
}

// 执行检索
search.searchOf("foxit", FullTextSearch.e_RankHitCountDESC, new SearchCallback() {
    @Override
    public int retrieveSearchResult(String filePath, int pageIndex,
            String matchResult, int matchStartTextIndex, int matchEndTextIndex,
            String sentence, int matchSentenceStartTextIndex, int matchSentenceEndTextIndex) {
        Log.d("FTS", "File: " + filePath + ", Page: " + pageIndex + ", Match: " + matchResult);
        return 0;
    }
});

注意事项

  • SDK 会递归遍历检索目录,对目录下的所有 PDF 文件建立索引。
  • 如需中止索引过程,在 PauseCallback.needToPauseNow() 返回 true 即可。
  • 当前不支持从索引中移除单个文件,如需移除需重建索引(reUpdate 设为 true)。

API 参考

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