SOLR可以执行UPSERT?(Can SOLR perform an UPSERT?)

2019-07-19 22:16发布

我一直试图做一个UPSERT相当于(插入或更新如果已存在)Solr中。 我只知道不工作,我已阅读的Solr / Lucene的文档也没有帮助。 这是我曾尝试:

curl 'localhost:8983/solr/update?commit=true' -H 'Content-type:application/json' -d '[{"id":"1","name":{"set":"steve"}}]'
{"responseHeader":{"status":409,"QTime":2},"error":{"msg":"Document not found for update.  id=1","code":409}}

我做的最多50个更新的一个请求,请求可能包含独特的领域(title_en和title_es例如)相同的ID。 如果有查询与否的存在ID列表,我可能分裂的数据,并进行独立的INSERT和UPDATE命令的方式......这将是一个可以接受的选择,但已经有一个处理程序,这是否? 我想避免在这一点上做的任何内部程序。

谢谢。

Answer 1:

使用Solr 4.0,你可以做所有这些文件的部分更新只用领域已更改将保持完整的文档相同。 该ID应该匹配。



Answer 2:

Solr的不支持UPSERT力学开箱。 您可以创建一个记录,也可以更新记录和语法是不同的。

如果你更新你必须确保所有其他前置入字段存储的记录(不只是索引)。 在幕后,更新只创建预先填入先前存储的值一个完全新的记录。 但是,如果在非常深的这个功能(可能在Lucene的本身)。

你看DataImportHandler ? 您反向控制流(从Solr的开始)​​,但它确实有检查支持哪些记录需要更新和记录需要创建。

或者你可以运行一个查询的Solr像http://solr.example.com:8983/solr/select?q=id%3A(ID1+ID2+ID3)&fl=id&wt=csv ,你问的Solr寻找你ID记录,并只返回的记录,它确实找到ID。 然后,你可以后期处理,为细分更新和插入。



文章来源: Can SOLR perform an UPSERT?