使用Alfresco社区-5.0.0版本。
在alfresco-global.properties文件中尝试以下属性:
queryConsistency = EVENTUAL ,然后所有查询都将转到Solr。 queryConsistency = TRANSACTIONAL ,然后所有查询都将发送到数据库。 并且默认模式首先从数据库执行所有查询,然后在数据库失败的情况下执行Solr。
问题1:是否可以通过任何方式首先查询Solr,如果没有来自Solr的结果,然后在一个事务中查询DB?
第二季度:我们可以执行Solr的某些查询以及Java方面的DB的某些查询吗?
答案 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.queryConsistency
和solr.query.fts.queryConsistency
属性。
因此,您似乎可以在Java代码中完成所需的操作,但是我自己还没有尝试过。作为一般规则,我发现最可取的是首先提高Solr的性能,然后仅在必要时才回退到数据库。我想不出将数据源选择嵌入业务逻辑中的好例子。