我使用 6 个核心,它们构成了我的索引的整体(800 万个文档,分布在 6 个核心上)。如果我想删除一个文档(例如,deleteById 或 deleteByQuery),似乎我必须进行 6 次删除调用,因为我永远不知道特定文档位于哪个核心。这是正确的吗?
当我搜索时,我可以给搜索一个“分片”参数,Solr 将搜索所有核心。删除时这似乎不成立。
有没有一种方法可以通过跨多个核心的一次调用来删除文档?
最佳答案
看起来您可以启用 shard DocTransformer返回在查询期间找到文档的分片。通过利用此功能,您可以查询要删除的文档,从结果中获取分片 ID(或您的情况下的核心),并将删除命令发送到适当的核心。当然,这在开始时会是一个额外的查询,但是您只需为每个文档发出一个删除请求,而不是为每个核心发出一个删除请求。
文档在设置方面有点多余,所以我做了一些挖掘,我认为应该将以下内容添加到您的 solrconfig.xml 文件中以启用此功能:
<transformer name="shard"
class="org.apache.solr.response.transform.ShardAugmenterFactory"/>
查看源代码 ShardAugmenterFactory它将检测请求中是否使用了分片,并在响应中启用分片输出。
关于solr - 如何使用 Solr 跨多个核心通过 1 次调用删除文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416760/