繁体   English   中英

如何在 Elasticsearch 中批量插入忽略过程中可能发生的所有错误?

[英]How to bulk Insert in Elasticsearch ignoring all errors that may occur in the process?

我使用的是Elasticsearch 6.8 版。

我需要将 ~10000 个文档(来自 csv 文件)插入现有和映射的索引中。

我正在使用python (3.7 版)代码:

    import csv  
    es = Elasticsearch();
    from elasticsearch import helpers
    with open(file_path) as f:
        reader = csv.DictReader(f)
        helpers.bulk(es, reader, index=index_name, doc_type=doc_type)

但我收到错误:

raise BulkIndexError("%i document(s) failed to index." % len(errors), errors)
elasticsearch.helpers.errors.BulkIndexError: ('3 document(s) failed to index.'

发生错误是因为 csv 文件中的某些值具有字符串值而不是浮点值。

499个文件后批量停止,应用程序崩溃。

有没有办法批量批量处理所有文档(~10000),如果有错误(由于映射或错误值)告诉python / elastic忽略这些文档并继续批量操作?

您可以将 arg raise_on_error设置为False因为它默认为True ,如Python 批量文档中所建议的。 它应该是这样的:

helpers.bulk(es, reader, index=index_name, doc_type=doc_type, raise_on_error=False)

请记住:

收集错误时,原始文档数据包含在错误字典中,这会导致内存使用率过高。 如果您需要处理大量数据并希望忽略/收集错误,请考虑使用streaming_bulk()助手,它只会返回错误而不是将它们存储在内存中。

您还可以查看此Python ES 批量示例中的示例 12、25和 39

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM