Проблема с настройкой тайм-аута запроса в Elasticsearch DSL

Я пытаюсь установить timeout для определенного запроса, используя elasticsearch_dsl. Я пробовал следующее:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, F

...

def do_stuff(self, ids):
    client = Elasticsearch(['localhost'], timeout=30)
    s = Search(using=client,
               index= 'my_index',
               doc_type=['my_type'])
    s = s[0:100]
    f = F('terms', my_field=list(ids))
    s.filter(f)

    response = s.execute()
    return response.hits.hits

Примечания:

  • Когда я меняю doc_type на тип, содержащий миллион объектов, запрос выполняется нормально.
  • Когда я указываю doc_type на несколько миллиардов объектов, я получаю ошибку тайм-аута, показывающую тайм-аут по умолчанию, равный 10 секундам.

Из elasticsearch_dsl документов я даже пытался установить подключение по умолчанию тайм-аут:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, F
from elasticsearch_dsl import connections

connections.connections.create_connection(hosts=['localhost'], timeout=30)

Я все еще получил 10-секундную ошибку тайм-аута.


person Jesse    schedule 08.10.2015    source источник


Ответы (1)


Так что по какой-то причине добавление параметра через .params() похоже на трюк:

s = Search(using=client,
           index= 'my_index',
           doc_type=['my_type'])
    .params(request_timeout=30)

Действительно интересная часть заключается в том, что теперь запрос выполняется менее чем за секунду, а индекс находится только на одном узле.

person Jesse    schedule 08.10.2015
comment
Параметр timeout=30 выдает следующую ошибку: TransportError(400, 'parse_exception', 'Failed to parse setting [timeout] with value [30] as a time value: unit is missing or unrecognized'). Вместо этого следует использовать request_timeout=30. - person coda; 16.03.2017
comment
@coda, ты уверен, что это так? может быть, это просто потому, что он каким-то образом кэшируется. Вы повторили поиск или искали что-то другое? - person toto_tico; 02.04.2019