You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FileNet CE API统计对象存储库指定时间段的文档数量

问题根因
  • FileNet CE服务端默认配置了QueryMaxRecords参数,默认值为200,会覆盖客户端设置的setMaxRecords值,即使客户端设置了10万的上限也会被服务端强制截断
  • 你当前用遍历分页累加的方式统计总量,不仅效率极低,百万级数据下很容易超时,也绕不开服务端的默认查询返回上限
  • 原代码存在变量名不一致、方法调用缺括号的语法问题
解决方案

方案1:直接统计总数(优先推荐,效率最高)

不需要查询文档详情,直接用SQL的COUNT聚合函数,服务端会直接返回统计结果,不会触发分页限制:

SearchScope scope = new SearchScope(obj);
SearchSQL sql = new SearchSQL();
// 聚合查询仅返回单条结果,无需设置setMaxRecords
String query = "SELECT COUNT(*) FROM Document WHERE DateCreated > 你的时间参数";
sql.setQueryString(query);
RepositoryRowSet res = scope.fetchRows(sql, 1, null, null);
int totalCount = 0;
if (res.iterator().hasNext()) {
    RepositoryRow row = res.iterator().next();
    totalCount = (Integer) row.getProperties().get("COUNT").getValue();
}

方案2:如果需要拉取全量文档数据(不止统计总数)

先联系CE管理员调整服务端配置,将QueryMaxRecords调整为适配业务的上限,或者设置为0解除查询返回条数限制,再修改客户端查询逻辑:

SearchScope scope = new SearchScope(obj);
SearchSQL sql = new SearchSQL();
// 服务端解除限制后,这里设置为0即可不限制返回条数
sql.setMaxRecords(0);
// 不要用SELECT *,只取需要的字段降低性能开销
String query = "SELECT Id, DocumentTitle, DateCreated FROM Document WHERE DateCreated > 你的时间参数";
sql.setQueryString(query);
// 第四个参数设为Boolean.TRUE启用可持续查询,绕过单次查询返回上限
RepositoryRowSet res = scope.fetchRows(sql, 1000, null, Boolean.TRUE);
int count = 0;
PageIterator p = res.pageIterator();
while (p.nextPage()) {
    count += p.getElementCount();
    // 可在此处处理当前页的文档数据
    Object[] currentPageDocs = p.getCurrentPage();
}
注意事项
  • 仅统计总数优先用COUNT聚合查询,性能比遍历全量文档高几个数量级,百万级数据也能秒返回结果
  • 时间查询条件建议用参数化方式传入,避免日期格式解析错误

内容的提问来源于stack exchange,提问作者Salman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:54:01