在 Jackrabbit 存储库之间复制 Lucene 索引
Posted
技术标签:
【中文标题】在 Jackrabbit 存储库之间复制 Lucene 索引【英文标题】:Copy Lucene indexes between Jackrabbit repositories 【发布时间】:2012-07-03 18:44:53 【问题描述】:我有两个包含相同内容的 Jackrabbit 实例。重建 Lucene 索引很慢,需要 30 多个小时,而且集群中所需的停机时间是有风险的。是否可以只重新索引一个 Jackrabbit,然后将 Lucene 索引从该实例复制到另一个?
天真地复制工作区目录下的 Lucene 索引文件是行不通的。问题似乎是内容由映射到 UUID 的文档编号索引,该 UUID 映射到索引节点的 JCR 路径,但是对于 Jackrabbit 实例之间的给定路径,这些 UUID 不稳定。 (两者实际上都是 Day CQ 发布者实例,由 CQ 作者实例的复制填充。)
我已经设法在 /jcr:system/jcr:versionStorage/ 下的存储库中找到 UUID 到路径的映射,但我看不到在存储库之间复制它以及 Lucene 索引的简单方法。然后我在文件中的任何位置都找不到 UUID->文档 ID 映射 - 这也是 Lucene 索引的一部分吗?
感谢您的帮助。我倾向于单独重新索引第二个实例并接受停机时间,但任何降低风险或重新索引集群所用时间的想法都值得赞赏!
最后,我们将采用 re-index-them-both 路线:我们已经设法将一个测试实例重新用作额外的活动实例,我们可以暂时将其放入农场,同时将其他两个取出转向重新索引。不过,我仍然有兴趣听到更好的方法来做到这一点!
【问题讨论】:
请看一下这篇文章——虽然你可能已经看过了。 ***.com/questions/670182/… 谢谢。不,我认为这些与我无关:它是嵌入式搜索引擎,所以我无法切换到 Solr,其他答案讨论复制索引文件,这对我来说还不够。我需要以某种方式将节点路径数据与索引结合起来并复制它,然后在另一个处重建路径 - > UUID - > 文档编号映射,或者以某种方式转换复制的索引以使用目标系统上的文档编号源系统。 【参考方案1】:老实说,这似乎是一个可怕的想法。我不确定是否有任何方法可以保证您拥有相同的基础数据,即使具有相同的内容和硬件配置。
如果您的性能数据与我们的相似,则复制整个存储库的时间少于重新索引所需的时间。您是否考虑过仅重新索引一个存储库,进行备份/复制,然后将备份/复制配置为您的第二个实例?
【讨论】:
谢谢 - 不,我没想到,这是个好主意。是的,rsync 两个存储库比 re-index 更快,但是当我们 rsync 实时到测试机器时,我们总是会遇到一些故障。我们的存储库太大,我们没有足够的存储空间来尝试使用 CQ 的各种热备份和恢复选项,所以我认为我们必须关闭复制源服务器以及复制目标服务器来尝试这个,然后我们在复制发生时只回到活动集群中的一台机器。不过我会跑过这个团队! 如果您了解 CQ 在线备份的工作原理,它基本上会执行一系列 rsync。每次迭代要复制的东西更少,然后它锁定最后一个。我很幸运使用重复的 rsync 来做同样的事情来复制正在运行的服务器。显然,如果被复制的服务器没有看到很多写入,那效果最好。以上是关于在 Jackrabbit 存储库之间复制 Lucene 索引的主要内容,如果未能解决你的问题,请参考以下文章
如何学习使用内容存储库和 Apache JackRabbit?
Jackrabbit Oak:入门并通过 RMI 连接到独立存储库