我一直在寻找一种在Solr中实现钩子/回调/事件的方法,以便在添加/更新/提交文档时得到通知。现在,我想我可能只需简单地解析日志,但如果它已经存在,那么能够实现一些模块/插件会很好。我查看了JavaDoc for 4.7,但我没有看到任何内容。我看过RealTimeGet,但这似乎不是我想要的。
Solr是否内置了可用的挂钩,或者我将不得不使用日志来确定索引中已更改的内容?
答案 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>
答案 2 :(得分:1)
这是一种方法。您可以为所有文档定义timestamp
字段,如下所示:
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />
每当您添加/更新文档时,Solr都会自动更新。然后,您可以在最后一分钟或某个此类间隔内查询您的收藏集中包含timestamp
的文档。
不确定是否存在更好的替代方案。