首页 > 解决方案 > 在 Solr 和 DB 之间切换以进行 alfresco cmis 查询执行

问题描述

使用 Alfresco 社区 - 5.0.0 版本。

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

queryConsistency=EVENTUAL那么所有查询都将发送到 Solr。 queryConsistency=TRANSACTIONAL那么所有查询都将发送到数据库。并且默认模式首先执行来自 DB 的所有查询,然后执行 Solr,以防 DB 发生故障。

Q1:有没有什么模式可以先查询 Solr,如果 Solr 没有结果,然后在一个事务中查询 DB?

Q2:我们可以从 JAVA 端执行一些来自 Solr 的查询和一些来自 DB 的查询吗?

标签: solralfrescoalfresco-sharecmis

解决方案


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

可以在此处找到有关配置此行为的详细信息,但基本上queryConsistency应设置为TRANSACTIONAL_IF_POSSIBLE

需要注意的是,特别是当您将 Lucene 查询转换为 CMIS 时,某些查询参数(例如+PATH:)和通配符(例如@docs:pageId:homepage)需要 Solr 才能运行,并且在 Solr 失败的情况下不能直接引用数据库。您可以在 Alfresco 中的 Admin Tools / Node Browser 下测试给定参数是否需要 Solr。运行您的查询选择不同的类型;type: solr-fts-alfresco仅限 Solr;type: db-afts如果 Solr 没有返回任何内容,则首先查询 Solr 并回退到数据库。

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

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

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


推荐阅读