在Solr和DB之间切换以执行露天cmis查询

时间:2018-10-23 12:10:56

标签: solr alfresco alfresco-share cmis

使用Alfresco社区-5.0.0版本。

在alfresco-global.properties文件中尝试以下属性:

queryConsistency = EVENTUAL ,然后所有查询都将转到Solr。 queryConsistency = TRANSACTIONAL ,然后所有查询都将发送到数据库。 并且默认模式首先从数据库执行所有查询,然后在数据库失败的情况下执行Solr。

问题1:是否可以通过任何方式首先查询Solr,如果没有来自Solr的结果,然后在一个事务中查询DB?

第二季度:我们可以执行Solr的某些查询以及Java方面的DB的某些查询吗?

1 个答案:

答案 0 :(得分:1)

Alfresco将此称为Transactional Metadata Query,当Solr不返回结果时,查询可以回退到数据库。

有关配置此行为的详细信息,请参见here,但基本上queryConsistency应该设置为 TRANSACTIONAL_IF_POSSIBLE

需要特别注意的是,特别是如果要将Lucene查询转换为CMIS,则某些查询参数(例如+PATH:)和通配符(例如@docs:pageId:homepage)需要Solr起作用,并且不能如果Solr发生故障,请直接参考数据库。您可以在管理工具/节点浏览器下的Alfresco中测试给定参数是否需要Solr。选择不同的类型运行查询; type: solr-fts-alfresco仅适用于Solr; type: db-afts首先查询Solr,如果Solr不返回任何内容,则回退到数据库。

要回答第二个问题,上面的第二个链接提到:

  

还可以在SearchParameters和QueryOptions对象上为每个查询设置solr.query.cmis.queryConsistencysolr.query.fts.queryConsistency属性。

因此,您似乎可以在Java代码中完成所需的操作,但是我自己还没有尝试过。作为一般规则,我发现最可取的是首先提高Solr的性能,然后仅在必要时才回退到数据库。我想不出将数据源选择嵌入业务逻辑中的好例子。