Alfresco CMIS与同一查询的结果不同

时间:2013-07-17 09:45:36

标签: alfresco cmis

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

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

如果搜索是针对特定的documento(例如,数字ID)或10,20,50个文档(我们不知道何时开始变得奇怪),这是真的。

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

到底有什么不对? CMIS是否以某种方式缓存结果?大型CMIS查询如何工作? 谢谢 A.

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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可以帮助减轻这种情况,但我并不是百分之百确定会这样做。

答案 2 :(得分:0)

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