0

我们有一点问题。我们在两个 Alfresco 实例之上构建了一个 GWT 应用程序。应用程序应该像这样工作:

  • 用户搜索文档
  • 我们的网络应用程序针对两个存储库发送两个相同的查询,等待两个结果并公开一个合并的结果集。

如果搜索的是特定文档(例如编号 id)或 10、20、50 个文档(我们不知道什么时候开始变得奇怪),则这是正确的。

如果查询是一致的(就像上个月的所有文档一样,应该有大约 30-60k/月),显然 cmis 查询(500)的限制之前停止了。但是,如果用户第一次点击“搜索”,一段时间后,结果集由 2 个文档组成。如果用户在此之后再次点击“搜索”,使用相同的查询,结果集几乎立即公开,并且列出了 500 个文档。

到底怎么回事?CMIS 是否以某种方式缓存结果?大型 CMIS 查询如何工作?谢谢。

4

3 回答 3

2

正如您提到的,您正在使用 Apache Chemistry。化学有一个客户端缓存机制: http ://chemistry.apache.org/java/how-to/how-to-tune-perfomance.html

于 2013-07-18T13:45:48.893 回答
2

我怀疑这根本与 CMIS 无关,而是由于 Alfresco Lucene“最大权限检查”问题。概括地说,Alfresco 将针对搜索结果集进行的最大权限检查次数有一个配置设置。执行此类检查所花费的总时间也有限制。这些限制在存储库属性文件中配置为:

# The maximum time spent pruning results

system.acl.maxPermissionCheckTimeMillis=10000

# The maximum number of results to perform permission checks against

system.acl.maxPermissionChecks=1000 

第一次运行搜索时,服务器开始执行这些检查并达到限制。然后它返回它能够过滤的搜索结果。现在权限缓存已填充,因此下次运行搜索时,结果会更快返回并且结果集更大。

在 Alfresco 中的搜索是非确定性的——你不能保证,对于大型结果集,你每次都会得到完全相同的结果集,不管你做了多大的设置。

如果您能够在某个时候升级,您可能会发现将 Alfresco 配置为使用 Solr 而不是 Lucene 可以帮助缓解这种情况,但我不能 100% 肯定它会。

于 2013-08-02T01:23:38.217 回答
0

要禁用安全检查,请将公共 SearchService 替换为 searchService。公共服务已强制执行安全性,因此使用 searchService 您可以避免安全检查。

于 2013-11-27T12:52:12.230 回答