我有两个solr索引,索引A包含100000个文档,B包含110000个文档,A是B的子集,我必须执行操作 XOR B =结果 并删除结果。
答案 0 :(得分:1)
来自here的答案:
如果只有100'000个文件转储所有文件ID并制作差异。如果你使用的是基于Linux的系统,你可以使用简单的工具来完成它。这样的事情可能会有所帮助
curl "<a href="http://your.hostA:port/solr/index/select?*:*&fl=id&wt=csv">http://your.hostA:port/solr/index/select?*:*&fl=id&wt=csv" > /tmp/idsA
curl "<a href="http://your.hostB:port/solr/index/select?*:*&fl=id&wt=csv">http://your.hostB:port/solr/index/select?*:*&fl=id&wt=csv" > /tmp/idsB
diff /tmp/idsA /tmp/idsB | grep "<\|>" | awk '{print $2;}' | sed
's/\(.*\)/<id>\1<\/id>/g' > /tmp/ids_to_delete.xml
现在你有了档案。现在您只需添加到该文件“<delete>
”和
“</detele>
”并使用curl将该文件上传到solr
curl -X POST -d @/tmp/ids_to_delete.xml "<a href="http://your.hostA:port">http://your.hostA:port
/solr/index/upadte"