solr - 如何使用 Solr 跨多个核心通过 1 次调用删除文档?

标签 solr

我使用 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/

相关文章:

database - 查询超过 1500 万行的最佳方式?

Solr 搜索器变暖

php - 使用(出)Solr 进行分面搜索

Solr Haystack 中的 Django 外键索引

solr - 通过 Haystack 构建 Solr 索引会引发未知字段错误

json - Docker - 在 Solr 核心中导入 Json 文档

solr - 在 solr copyField dest :'textnge' 中获取错误不是显式字段并且与动态字段不匹配

ruby - 太阳黑子/Solr : non-alphabetical characters

solr - 如何让 Solr 的拼写检查器忽略大小写?

Solr DataImportHandler 未索引所有记录