使用弹性搜索python包时读取超时错误

时间:2018-05-07 12:03:23

标签: python elasticsearch

我已经安装了elasticsearch python包,我已经创建了一个弹性的clustere。我使用下面的python代码将数据发送到弹性云:

from elasticsearch import Elasticsearch, RequestsHttpConnection
import time
import datetime

es = Elasticsearch(['70.19.172.110:9200'],http_auth=('<username>','<password>'))

for x in range(0,5):
    es.index(index='test', doc_type='json', id=x, body={
    'data1':"Hello World',
    'value':325,
    'time': datetime.datetime.now()

    })

    print("Data sent {} ".format(x))
    time.sleep(60)

因此,您可以在代码中看到我以1分钟time.sleep(60)的间隔发送数据。这很好,所有5个数据都在弹性搜索中。然后我将time.sleep(60)更改为time.sleep(300),它给了我以下错误:

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

我做错了什么吗?有什么方法可以保持与弹性搜索的连接,这样我就不会遇到这些类型的错误。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试启动es.index的超时,因为Elasticsearch限制为10秒超时,如果在30秒内它将不响应,这意味着您的主机未连接或不响应请求

from elasticsearch import Elasticsearch, RequestsHttpConnection
import time
import datetime
timenow = datetime.datetime.now()

es = Elasticsearch(['70.19.172.110:9200'],http_auth=('<username>','<password>'))

for x in range(0,5):
   es.index(index='test', doc_type='json', id=x, body={
   'data1':"Hello World",
   'value':325,
   'time':timenow,
   'timeout':30, # The Time Of timeout you want

    })

print("Data sent {} ".format(x))
time.sleep(60)