Подтвердить что ты не робот

Тайм-аут соединения с Elasticsearch

from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch()

doc = {
    'author': 'kimchy',
    'text': 'Elasticsearch: cool. bonsai cool.',
    'timestamp': datetime(2010, 10, 10, 10, 10, 10)
}
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)
print(res['created'])

Этот простой код возвращает следующую ошибку:

elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutError(HTTPConnectionPool(host='localhost', port=9200): Read timed out. (read timeout=10))

Очень странно, потому что сервер готов и настроен (http://localhost: 9200/ возвращает json).

4b9b3361

Ответ 1

По умолчанию значение тайм-аута устанавливается равным 10 секундам. Если вы хотите изменить значение глобального тайм-аута, это может быть достигнуто установкой флага timeout = your-time при создании объекта.

Если вы уже создали объект без указания значения тайм-аута, вы можете установить значение тайм-аута для конкретного запроса, используя request_timeout = ваш-время флаг в запросе.

es.search(index="my_index",
          doc_type="document",
          body=get_req_body(),
          request_timeout=30)

Ответ 2

Проблема с задержкой соединения может возникнуть, если вы используете услугу Amazon Elastic Search.

es = Elasticsearch ([{host ':' xxxxxx.us-east-1.es.amazonaws.com ',' port ': 443,' use_ssl ': True}])

Вышеупомянутый код python, в котором вы переопределяете порт по умолчанию от 9200 до 443 и устанавливаете ssl в true, разрешит проблему.

Если порт не указан, он пытается подключиться к pprt 9200 в указанном узле и не работает после истечения времени

Ответ 3

Это не связано с увеличением тайм-аута до 30 секунд. Действительно ли люди думают, что для поиска эластичного поиска потребуется до 30 секунд, чтобы вернуть один маленький удар?

Как я исправил эту проблему, перейдите в config/elasticsearch.yml раскомментируйте следующие

http.port: 9200
network.host: 'localhost' 

Network.host может быть установлен в 192.168.0.1, который может работать. Но я просто изменил его на "localhost"

Ответ 4

elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutError(HTTPConnectionPool(host='localhost', port=9200): Read timed out. (read timeout=10)) означает, что запрос не заканчивался в указанное время (по умолчанию, timeout = 10).

Это будет работать с 30 секундами:

res = es.index(index="test-index", doc_type='tweet', id=1, body=doc, timeout=30)

Ответ 5

моя личная проблема была решена с помощью (timeout = 10000) который практически не был достигнут, поскольку записи на сервере были только 7.000, но у него был большой трафик, и его ресурсы были забиты, и именно поэтому соединение снижалось

Ответ 6

Обратите внимание, что одной из распространенных причин тайм-аутов при выполнении es.search (или es.index) является большой размер запроса. Например, в моем случае довольно большого размера индекса ES (> 3M документов) выполнение поиска по запросу из 30 слов занимало около 2 секунд, в то время как поиск по запросу из 400 слов занимал более 18 секунд. Так что для достаточно большого запроса даже тайм-аут не спасет вас. Простое решение - обрезать запрос до размера, на который можно ответить ниже тайм-аута.

Увеличение таймаута или повторная попытка тайм-аута помогут вам, если причина была в трафике, иначе это может быть вашим виновником.