Elasticsearch _bulk возвращает пустой словарь

У меня странное поведение в моем кластере 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 возвращает пустой ответ и ломает все вниз? Как я могу отладить это?


person est    schedule 18.01.2021    source источник
comment
Можете ли вы показать свой полный код Python?   -  person Val    schedule 18.01.2021


Ответы (1)


Оказывается, это моя глупость. Я указал параметр filter_path=['hits.hits._id']) во время массового запроса.

Спасибо за совет @Val.

person est    schedule 18.01.2021