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

Switch between Solr and DB for Query Execution alfresco cmis

使用 Alfresco Community - 5.0.0 版本。

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

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

Q1:有什么模式可以先查询Solr,如果Solr没有结果再查询数据库?

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

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

可以找到有关配置此行为的详细信息 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 returns 什么都没有,则回退到数据库。

为了回答你的第二个问题,上面的第二个 link 提到:

The solr.query.cmis.queryConsistency and solr.query.fts.queryConsistency properties can also be set per query on the SearchParameters and QueryOptions objects.

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