有没有办法在Solr 4.7中添加/更新/提交文档时触发通知

时间:2014-10-23 16:40:20

标签: solr solr4

我一直在寻找一种在Solr中实现钩子/回调/事件的方法,以便在添加/更新/提交文档时得到通知。现在,我想我可能只需简单地解析日志,但如果它已经存在,那么能够实现一些模块/插件会很好。我查看了JavaDoc for 4.7,但我没有看到任何内容。我看过RealTimeGet,但这似乎不是我想要的。

Solr是否内置了可用的挂钩,或者我将不得不使用日志来确定索引中已更改的内容?

3 个答案:

答案 0 :(得分:3)

您可以创建自定义更新处理器链并创建自己的UpdateRequestProcessor,以便为添加/删除/提交/等执行自定义代码。如果需要,还可以访问传入请求。

有关更新处理器和链的其他信息,请参阅wiki page。这些处理器可以通过扩展抽象Java类并按照Solr Plugins page中的描述捆绑插件来构建,或者您可以按照script update processor page中的描述在javascript中编写实现。

答案 1 :(得分:2)

你可以在postCommit上运行一个可执行文件并使用一个时间戳字段(如arun所建议的),如果需要的话

<!-- 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

答案 2 :(得分:1)

这是一种方法。您可以为所有文档定义timestamp字段,如下所示:

<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />

每当您添加/更新文档时,Solr都会自动更新。然后,您可以在最后一分钟或某个此类间隔内查询您的收藏集中包含timestamp的文档。

不确定是否存在更好的替代方案。