Elasticsearch нарезанный свиток после подсчета не работает - PullRequest
1 голос
/ 04 февраля 2020

У меня странная проблема ...

Ну, с самого начала ...

Elasticsearch версия 6.8

Я запускаю параллельную прокрутку (используя python библиотекаasticsearch-dsl и python пул многопроцессорных систем), который работает нормально. Код более или менее выглядит следующим образом:

def dump_slice(slice_no, search, slices):
    search = search.extra(slice={'id': slice_no, 'max': slices})
    return [hit for hit in search.scan()]

...

search = ... # elasticsearch-dsl Search object
pool = Pool(10)

dump_slice_partial = partial(dump_slice, search=search, slices=10)
results = list(chain(*pool.map(dump_slice_partial, range(query_threads))))

pool.close()

, но когда я добавляю, запускаю count раньше (любой - даже не count для поискового объекта, который я использую в нарезанной прокрутке), он не не работает --asticsearch генерирует 500/400 / тайм-ауты (случайным образом)

код выглядит следующим образом

def dump_slice(slice_no, search, slices):
    search = search.extra(slice={'id': slice_no, 'max': slices})
    return [hit for hit in search.scan()]

...

search = ... # elasticsearch-dsl Search object
total = search.count()
pool = Pool(10)

dump_slice_partial = partial(dump_slice, search=search, slices=10)
results = list(chain(*pool.map(dump_slice_partial, range(query_threads))))

pool.close()

[единственное, что я добавил здесь, это total = search.count()]

в этом примере во время scan() это дает мне:

elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'text is empty (possibly HTTP/0.9)')

или

elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'Failed to parse request body')

или несколько случайных 500 или тайм-аут.

Это не имеет смысла для меня это выглядит как ошибка в ES ...

Кто-нибудь видел это раньше?

Как я могу получить общее количество результатов перед параллельным вызовом секционированной прокрутки?

...