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