我需要让SOLR索引与另一个存储库(SQL DB)保持同步。 SOLR是来源:文档上的所有操作(更新,删除,'插入')都在SOLR中完成,并从我无法控制的第三方软件中解雇。
我必须快速完成,所以做了一些有效的事情' :
2个预定工作:
我将这些保留在单独的作业中以获得更大的灵活性(通过配置启用/禁用),并且还因为每个的同步计划不同。
我对我的解决方案不满意,我没有太多时间深入研究SORL文档。 但现在,我想知道是否有更好的方法来做到这一点。理想情况下,几乎可以实时同步并按需启动它。
可能是SOLR配置中的事件处理程序吗?
我认为更新不会成为事件处理程序的问题,如果我可以挂钩更新事件并在数据库中触发相同的操作。 (如果有人能确认这是否是最佳方法)
对于删除,这是最需要的,因为ID之间的比较很重(SOLR中的大型DB和大型文档集)。
SOLR中是否有任何事件处理程序可以让我知道哪些文档被删除(提交删除查询时)?
我觉得在这里问我可以节省时间。 另外,如果可能的话,我会指出一些样品会很棒。 (最好使用.NET,但我愿意在JAVA中这样做,因为它是SOLR的框架或混合两者。) 感谢。
答案 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>