代码之家  ›  专栏  ›  技术社区  ›  Artem Russakovskii

Solr条件添加/更新?

  •  4
  • Artem Russakovskii  · 技术社区  · 16 年前

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

    例如

    • 我有100个文档,其中有一个名为 <id>
    • 我张贴了10份文件,其中一些可能是重复的 <id> s、 在这种情况下,Solr将使用相同的 <id>
    • 我有一个领域叫 <dateCreated> 我只想更新一个 <doc> <创建日期> 它比旧的更大 <创建日期> < (当然,这只是个问题)

    我怎样才能完成这样一件事呢?

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

    谢谢

    3 回复  |  直到 16 年前
        1
  •  2
  •   Mauricio Scheffer    16 年前

    我可以想出两种方法:

    1. UpdateHandler 和覆盖 addDoc 执行该检查。
    2. 在客户端代码中放置适当的锁(关键部分),以便获取存储的文档,比较日期,并以线程安全的方式有条件地添加新文档。

    请记住,Solr不是一个数据库,将它与MySQL进行比较就是比较苹果和桔子。

        2
  •  2
  •   Bob B    13 年前

    从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>
    
        3
  •  1
  •   Eric Pugh    16 年前

    红宝石( http://github.com/mwmitchell/rsolr/tree/master )使定制加载脚本变得非常容易。