索引全文检索
福昕 PDF SDK 安卓版通过 Core SDK 提供了索引全文检索能力(Full Text Search),可对离线目录中的多份 PDF 文件建立索引数据库,然后基于索引进行高效的关键字检索。适用于需要跨文件批量搜索的场景。
核心类
| 类 | 说明 |
|---|---|
FullTextSearch | 全文检索入口对象,负责索引管理和执行检索 |
DocumentsSource | 文档来源,指定需要索引的目录路径(会递归遍历子目录) |
SearchCallback | 检索结果回调,重写 retrieveSearchResult() 接收每条匹配结果 |
排序方式常量
| 常量 | 值 | 说明 |
|---|---|---|
e_RankNone | 0 | 不排序,按文件遍历顺序返回 |
e_RankHitCountASC | 1 | 按命中次数升序排列 |
e_RankHitCountDESC | 2 | 按命中次数降序排列 |
基本流程
- 创建
DocumentsSource指定扫描目录 - 创建
FullTextSearch并通过setDataBasePath()设置索引数据库路径 - 调用
startUpdateIndex()建立或更新索引(返回Progressive,支持渐进式执行;reUpdate为true时重建全部索引) - 调用
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 参考
FullTextSearch、DocumentsSource、SearchCallback 的完整接口说明请参阅 API 手册。