将SOLR与另一个存储库同步

时间:2014-09-16 16:41:20

标签: solr handler sync

我需要让SOLR索引与另一个存储库(SQL DB)保持同步。 SOLR是来源:文档上的所有操作(更新,删除,'插入')都在SOLR中完成,并从我无法控制的第三方软件中解雇。

我必须快速完成,所以做了一些有效的事情' :

2个预定工作:

  • 第一个是SOLR中新插入和更新的文档:简单 搜索查询带给我需要同步的文档,所以它 很容易进入我的数据库。
  • 第二个是删除: 这将获取SOLR中的所有ID,并将它们与DB中的ID进行比较 正在删除额外的。

我将这些保留在单独的作业中以获得更大的灵活性(通过配置启用/禁用),并且还因为每个的同步计划不同。

我对我的解决方案不满意,我没有太多时间深入研究SORL文档。 但现在,我想知道是否有更好的方法来做到这一点。理想情况下,几乎可以实时同步并按需启动它。

可能是SOLR配置中的事件处理程序吗?

我认为更新不会成为事件处理程序的问题,如果我可以挂钩更新事件并在数据库中触发相同的操作。 (如果有人能确认这是否是最佳方法)

对于删除,这是最需要的,因为ID之间的比较很重(SOLR中的大型DB和大型文档集)。

SOLR中是否有任何事件处理程序可以让我知道哪些文档被删除(提交删除查询时)?

我觉得在这里问我可以节省时间。 另外,如果可能的话,我会指出一些样品会很棒。 (最好使用.NET,但我愿意在JAVA中这样做,因为它是SOLR的框架或混合两者。) 感谢。

1 个答案:

答案 0 :(得分:0)

Solr中有一个更新挂钩,允许您运行二进制文件:

<!-- The RunExecutableListener executes an external command.
         exe  - the name of the executable to run
         dir  -  dir to use as the current working directory. default="."
         wait - the calling thread waits until the executable returns.
                default="true"
         args - the arguments to pass to the program.  default=nothing
         env  - environment variables to set.  default=nothing
      -->
    <!-- A postCommit event is fired after every commit
      -->
    <listener event="postCommit" class="solr.RunExecutableListener">
      <str name="exe">snapshooter</str>
      <str name="dir">solr/bin</str>
      <bool name="wait">true</bool>
      <!--
      <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
      <arr name="env"> <str>MYVAR=val1</str> </arr>
        -->
    </listener>
  </updateHandler>

请参阅documentation