在 Solr 和 DB 之间切换,以便在户外 CMI 上执行查询



使用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.queryConsistencysolr.query.fts.queryConsistency属性。

所以看起来你可以在Java代码中完成你想要的,但我自己还没有尝试过。作为一般规则,我发现最可取的是首先使用Solr以提高其性能,然后仅在必要时回退到数据库。我想不出在业务逻辑中嵌入数据源选择的好案例。

最新更新