我正在使用6个核心,它构成了我的索引的总体(800万个文档,分布在6个核心)。如果我想删除一个文档(比如deleteById或deleteByQuery),似乎我必须进行6次删除调用,因为我从来不知道特定文档所在的核心。这是正确的吗?
当我搜索时,我可以给搜索一个'shards'参数,Solr将搜索所有核心。删除时,这似乎不正确。
有没有办法在多个核心中通过一次调用删除文档?
答案 0 :(得分:2)
看起来您可以启用shard DocTransformer以返回查询期间找到文档的分片。通过利用这一点,您可以查询要删除的文档,从结果中获取分片ID(或您的案例中的核心),并将删除命令发送到适当的核心。当然,这将是一个额外的查询,但您只需要为每个文档发出一个删除请求,而不是每个文档都有一个。
这个文档有点备用,所以我做了一些挖掘,我认为应该将以下内容添加到你的solrconfig.xml文件中以启用它:
<transformer name="shard"
class="org.apache.solr.response.transform.ShardAugmenterFactory"/>
通过查看ShardAugmenterFactory的来源,它将检测请求中是否使用了分片并在响应中启用分片输出。