Solr Core 的原子更新:防止由于一些文档丢失而导致批量失败

问题描述 投票:0回答:1

我在使用批处理 python 脚本时遇到 Solr 核心中的原子更新问题。该脚本将 10000 个文档的数据批量发送到 Solr 核心进行原子更新,但当脚本执行期间一批文档中的一个文档从核心中删除时,我遇到了问题。这会导致 400 错误响应,并且该特定批次中的 10000 个文档均未更新。我想找到一种解决方案,防止单个丢失的文档影响整批原子更新。值得一提的是,由于性能问题,为每个文档单独发送更新是不可行的。

这是我目前发送数据的方式:

headers = {"Content-type": "application/json"}
response = requests.post(solr_core_url, data=json_data, headers=headers)

其中 json_data 包含所有 10000 个文档的更新数据。虽然这种方法在大多数情况下都有效,但当文档过期并在脚本运行时被另一个进程删除时,它很容易失败。

我遇到的错误信息如下:

{"responseHeader":{"status":400,"QTime":20},"error":{"metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.common.SolrException"],"msg":"[doc=93961393634] missing required field: datatype","code":400}}

我的问题是:

如何修改脚本或我的方法来处理单个缺失文档导致整批原子更新失败并出现 400 错误的情况?

是否有任何技术或策略来确保原子更新能够适应脚本执行期间某些文档过期的可能性?

附加信息,我使用的是 solr 版本 6.5.0

json indexing solr solrcloud
1个回答
0
投票

错误

[doc=93961393634] missing required field: datatype
听起来像是其中一个文档中缺少一个字段。因此,一种方法是确保该字段存在于文档中,然后再将其包含在
json_data
中。

另一种方法是缩小批次,例如每批次 10,000 到 500 条记录。一次提交所有 10,000 个文档可能会慢一点,但应该不会太糟糕,而且它可以让您轻松发现哪个批次有不良记录。

© www.soinside.com 2019 - 2024. All rights reserved.