2

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

当我搜索时,我可以给搜索一个“shards”参数,Solr 将搜索所有内核。删除时,这似乎不是真的。

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

4

1 回答 1

2

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

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

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

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

于 2013-03-14T18:39:22.193 回答