使用Alfresco社区 - 5.0.0版本。
在alfresco-global.properties文件中尝试了以下属性:
queryConsistency=EVENTUAL,那么所有查询都将转到Solr。queryConsistency=TRANSACTIONAL,那么所有查询都将进入DB。默认模式首先执行来自数据库的所有查询,然后在数据库出现故障时执行 Solr。
Q1:有没有可以先查询Solr的模式,如果没有Solr的结果,则在一个事务中查询数据库?
Q2:我们可以从 Solr 执行一些查询,从 JAVA 端执行一些来自数据库的查询吗?
Alfresco称之为事务元数据查询,当Solr不返回任何结果时,查询可以回退到数据库。
有关配置此行为的详细信息,请参阅此处,但基本上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以提高其性能,然后仅在必要时回退到数据库。我想不出在业务逻辑中嵌入数据源选择的好案例。