我非常需要在Solr中进行条件更新,这在MySQL中很容易实现。
例如,
<id>
<id>
,在这种情况下,Solr会使用相同的<id>
来更新现有记录<dateCreated>
的字段,如果新的<doc>
比旧<dateCreated>
更重要,我只想更新<dateCreated>
(这适用于重复{当然只有{1}} 我怎么能完成这样的事情?
上下文正在尝试对抗竞争条件,导致同一ID的多次添加,但执行顺序错误。
感谢。
答案 0 :(得分:2)
我可以想到两种方式:
UpdateHandler
并覆盖addDoc
以实现该检查。请记住,Solr不是一个数据库,将它与MySQL进行比较是比较苹果和橙子。
答案 1 :(得分:2)
从solr 4.0开始,通过_version_
字段启用了乐观并发。
http://yonik.com/solr/optimistic-concurrency/
要启用,您需要确保schema.xml包含
<field name="_version_" type="long" indexed="true" stored="true"/>
和solrconfig.xml
<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">${solr.data.dir:}</str>
</updateLog>
</updateHandler>
答案 2 :(得分:1)
使用这样的自定义添加逻辑,我发现编写自己的客户端更新程序效果更好。它可以防止您在Solr内部进行混乱,这使得将来更容易更新。您可以在SolrJ中明确地执行此操作,但如果您不是Java开发人员,则可能有您自己首选语言的客户端库... PHP,Python,Ruby,C#等...
rsolr Ruby gem(http://github.com/mwmitchell/rsolr/tree/master)可以非常容易地将自定义加载脚本放在一起。