簡體   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