Solr索引数据同步(ReplicationHandler)功能搭建过程中的问题

这是官方的搭建过程:http://wiki.apache.org/solr/SolrReplication。(有空的时候再翻译)
官方的文档亦或网上其他教程的搭建挺简单的。我搭建的时候发现其实并不是这么简单。
写这个文章主要想说的是搭建过程中遇到的问题。
solr ReplicationHandler 运行过程(简略过程)是:
  • master端是使用了lucene的IndexDeletionPolicy,获取每次更新的索引,并存放到solr的IndexDeletionPolicyWrapper.solrVersionVsCommits属性中。
  • salve端再通过网络请求到master端的IndexDeletionPolicyWrapper.solrVersionVsCommits去取值。
  • 我的ReplicationHandler功能在第2步骤就是无法取到值。
    寻找了很长时间,问题可能是在我建立索引的过程和solr默认的方式不一样。我是通过自定义的coreContainer创建索引,并通过lucene的IndexDeletionPolicy将他放到solr的IndexDeletionPolicyWrapper.solrVersionVsCommits中。问题的关键就在这,此IndexDeletionPolicyWrapper和上面的IndexDeletionPolicyWrapper是两个对象。
    再往前跟踪,发现上面的IndexDeletionPolicyWrapper是用在SolrDispatchFilter.CoreContainer属性的创建的。和我建立索引的coreContainer不是一个对象。
    解决方法:继承SolrDispatchFilter重现init(),最主要修改CoreContainer的产生方式,换成自己的。