solr - 在 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 的查询吗?
解决方案
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.queryConsistency
也solr.query.fts.queryConsistency
可以在 SearchParameters 和 QueryOptions 对象上按查询设置。
所以看起来你可以在你的 Java 代码中完成你想要的,但我自己没有尝试过。作为一般规则,我发现最理想的做法是首先使用 Solr 以获得性能提升,然后仅在必要时回退到数据库。我想不出将数据源选择嵌入业务逻辑的好案例。
推荐阅读
- reactjs - 如何更改 React 的 Material-ui 日期选择器中的图标
- python - numpy中任意函数的逐行广播
- java - 从我的主程序中删除第三方记录器
- excel - 当 Vlookup 导致值发生变化时自动运行宏
- c++ - 试图找到原子加载/存储操作的最大大小
- asp.net-mvc - 发布后特定视图不更新内容
- ruby-on-rails - Rails ActiveModel 使用单类设计 belongs_to 和 has_many
- python - 类变量引用本身?
- javascript - React Hooks 可以有方法吗?
- python - 将一维 Numpy 数组作为行添加到 DataFrame