1

我正在使用org.apache.solr.client.solrj.impl.HttpSolrServer.HttpSolrServer调用 solr。
对于顺序删除和添加操作,我正在点击 solr

        solr.addBeans(<solrDocs>);
        solr.deleteByQuery(<Query>)
        solr.commit();

无论如何,我可以在一个 solr 调用中实现相同的目标,例如 solr.execute(addbean, deleteByQuery1)? 我知道根据solr wiki
,一条消息中可能包含多个命令。我知道如何在 solrj 和任何其他 java 库中实现相同的目标。

我想通过这个实现什么?
原子操作。

让我们举个例子:有两个进程(或线程)P1和P2。每个执行添加(对应A1和A2)和删除(D1和D2)操作。让顺序如下:

D1(进程 P1 删除文档)
D2(进程 P2 删除文档)
A2(进程 P2 添加文档)
P2.commit ->(这将使 D1 也提交到 Solr)
A1 (由进程 P1 添加文档):现在即使它失败了,D1 也不会回滚(因为 P2.commit)
我想要的是回滚 P1.D1

4

0 回答 0