У меня странное поведение в моем кластере ES7.8 при вставке данных с использованием elasticsearch.helpers.streaming_bulk выдаст странную ошибку:
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 193, in streaming_bulk
raise_on_error, *args, **kwargs)
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 124, in _process_bulk_chunk
for data, (op_type, item) in zip(bulk_data, map(methodcaller('popitem'), resp['items'])):
KeyError: u'items'
Чтобы отладить это, я добавил строку в perform_request
перед return
вот так:
def perform_request(...):
print(response.status, response.getheaders(), raw_data)
return response.status, response.getheaders(), raw_data
в логах показывает:
200 HTTPHeaderDict({'content-length': '2', 'content-type': 'application/json; charset=UTF-8'}) {}
Это выглядит действительно запутанным. При тщательном сравнении входных и фактических документов ES я обнаружил, что вероятность того, что данные были успешно записаны в индекс, составляет 50 %, а остальные 50 % — нет.
Почему кластер ES7.8 возвращает пустой ответ и ломает все вниз? Как я могу отладить это?