Search Solr条件添加/更新?

Search Solr条件添加/更新?,search,solr,add,Search,Solr,Add,我非常简单地需要在Solr中进行条件更新,这在MySQL中很容易实现 比如说, 我有100个文档,其中有一个名为 我发布了10份文件,其中一些可能是重复的s,在这种情况下,Solr将使用相同的s更新现有记录 我有一个名为的字段,我只想更新a,如果新的比旧的更大,当然,这只适用于重复的s 我怎样才能完成这样一件事呢 上下文试图对抗竞争条件,导致对同一ID进行多个加法,但执行顺序错误 谢谢。我可以想出两种方法: 编写自己的UpdateHandler并重写以实现该检查。 在客户机代码中放置适当的锁关键

我非常简单地需要在Solr中进行条件更新,这在MySQL中很容易实现

比如说,

我有100个文档,其中有一个名为 我发布了10份文件,其中一些可能是重复的s,在这种情况下,Solr将使用相同的s更新现有记录 我有一个名为的字段,我只想更新a,如果新的比旧的更大,当然,这只适用于重复的s 我怎样才能完成这样一件事呢

上下文试图对抗竞争条件,导致对同一ID进行多个加法,但执行顺序错误


谢谢。

我可以想出两种方法:

编写自己的UpdateHandler并重写以实现该检查。 在客户机代码中放置适当的锁关键部分,以便获取存储的文档,比较日期,并以线程安全的方式有条件地添加新文档。
请记住,Solr不是一个数据库,将它与MySQL进行比较就是比较苹果和橙子。

使用这样的定制添加逻辑,我发现编写自己的客户端更新程序效果更好。它使您不必在Solr内部乱搞,这使得将来更容易进行更新。您可以在SolrJ中明确地做到这一点,但如果您不是Java开发人员,可能有一个您自己喜欢的语言的客户端库。。。PHP,Python,Ruby,C等等


rsolr Ruby gem使编写自定义加载脚本变得非常容易。

从solr 4.0开始,乐观并发通过_version_uu字段启用

要启用,您需要确保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>

你的问题缺少信息。再试一次,所以吃了我的小于/大于以及里面的所有东西。更正!谢谢,我希望得到一些已经得到支持的东西。1听起来很有用,但很复杂-我不是Java开发人员。2可能是我在最后期限的限制条件下所采用的方法。您基本上通过使用SolrInputDocument中的_VERSION_u字段来调用乐观并发。