Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Solr在多个核心之间通过一次调用删除文档?_Solr - Fatal编程技术网

如何使用Solr在多个核心之间通过一次调用删除文档?

如何使用Solr在多个核心之间通过一次调用删除文档?,solr,Solr,我使用的是6个核心,它们构成了我索引的全部(800万个文档,分布在6个核心上)。如果我想删除一个文档(比如deleteById或deleteByQuery),似乎我必须进行6次delete调用,因为我永远不知道特定文档位于哪个核心。这是正确的吗 当我搜索时,我可以给搜索一个'shards'参数,Solr将搜索所有核心。删除时,此道义似乎不正确 有没有一种方法可以通过跨多个核心的一次调用来删除文档?看起来您可以启用以返回在查询过程中找到文档的碎片。通过利用这一点,您可以查询要删除的文档,从结果中获

我使用的是6个核心,它们构成了我索引的全部(800万个文档,分布在6个核心上)。如果我想删除一个文档(比如deleteById或deleteByQuery),似乎我必须进行6次delete调用,因为我永远不知道特定文档位于哪个核心。这是正确的吗

当我搜索时,我可以给搜索一个'shards'参数,Solr将搜索所有核心。删除时,此道义似乎不正确


有没有一种方法可以通过跨多个核心的一次调用来删除文档?

看起来您可以启用以返回在查询过程中找到文档的碎片。通过利用这一点,您可以查询要删除的文档,从结果中获取碎片id(在您的案例中为core),并将delete命令发送到相应的core。当然,这在开始时是一个额外的查询,但是您只需要为每个文档发出一个删除请求,而不是为每个核心发出一个删除请求

文档中有一点关于设置的内容,所以我做了一些挖掘,我认为应该将以下内容添加到solrconfig.xml文件中以启用此功能:

     <transformer name="shard" 
         class="org.apache.solr.response.transform.ShardAugmenterFactory"/>


通过查看数据源,it将检测请求中是否使用了碎片,并在响应中启用碎片输出。

唉,先生,经过一些实验,我发现这是一个4.0功能。我一直在使用Solr3.6,直到我们可以将索引升级到Solr4.x可以处理的新版本。这只是为可能遇到此问题的人提供的更新。我将我们的环境更新为Solr4.x,这个答案是正确的。它起作用了。