[英]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.