如何使用Solr删除多个核心上的1个调用文档?

时间:2013-03-14 17:58:19

标签: solr

我正在使用6个核心,它构成了我的索引的总体(800万个文档,分布在6个核心)。如果我想删除一个文档(比如deleteById或deleteByQuery),似乎我必须进行6次删除调用,因为我从来不知道特定文档所在的核心。这是正确的吗?

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

有没有办法在多个核心中通过一次调用删除文档?

1 个答案:

答案 0 :(得分:2)

看起来您可以启用shard DocTransformer以返回查询期间找到文档的分片。通过利用这一点,您可以查询要删除的文档,从结果中获取分片ID(或您的案例中的核心),并将删除命令发送到适当的核心。当然,这将是一个额外的查询,但您只需要为每个文档发出一个删除请求,而不是每个文档都有一个。

这个文档有点备用,所以我做了一些挖掘,我认为应该将以下内容添加到你的solrconfig.xml文件中以启用它:

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

通过查看ShardAugmenterFactory的来源,它将检测请求中是否使用了分片并在响应中启用分片输出。