Elasticsearch search_phase_execution_exception в Python

avatar
Orkun
9 августа 2021 в 06:34
243
0
0

Я получаю все свои документы Elasticsearch с помощью API-интерфейса прокрутки с приведенным ниже кодом на Python.

size = 100
data = es.search(
            index=index,
            scroll='25m',
            size=size,
            body=body
        )
max_val = data['hits']['total']['value']

sid = data['_scroll_id']
scroll_size = len(data['hits']['hits'])
while scroll_size > 0:
    .........
    data = es.scroll(scroll_id=sid, scroll='25m')
    sid = data['_scroll_id']
    scroll_size = len(data['hits']['hits'])

В некоторых индексах у меня менее 100 документов, а в некоторых из них более 30000 документов, поэтому я использую API прокрутки.

Я написал этот код с помощью этого учебника

Код работает, но через некоторое время я получаю следующую ошибку.

NotFoundError(404, 'search_phase_execution_exception', 'No search context found for id

Я пытался решить эту ошибку с помощью смены прокрутки. Прокрутка была 5 м, а затем я установил 25 м, но все равно получаю ту же ошибку. Как я могу это решить?

Спасибо за ответ

Источник
Val
9 августа 2021 в 07:03
1

Можете ли вы дать определение «через некоторое время»? Также я думаю, что 25-метровая прокрутка не нужна, т.е. не может потребоваться более 25 минут, чтобы получить 100 документов. Помните, что каждый запрос прокрутки увеличивает срок жизни контекста прокрутки, поэтому длина scroll должна быть достаточной только для одной итерации, то есть для получения документов «размера». В вашем случае должно происходить что-то еще.

Orkun
10 августа 2021 в 05:52
0

Этот скрипт запускается более одного раза. В один раз происходит эта ошибка, но в другой раз я не получаю ошибку. Я не получаю ошибку в том же месте, что и в предыдущей среде выполнения. Смысл через какое-то время таков. Я получаю сообщение об ошибке, когда индексы имеют более 10000 документов (например, 55000 документов)

Ответы (0)