从python脚本我将数据发送到elasticsearch服务器
这将帮助我连接到ES
es = Elasticsearch('localhost:9200',use_ssl=False,verify_certs=True)
并使用下面的代码我可以将所有数据发送到我的本地ES服务器
es.index(index='alertnagios', doc_type='nagios', body=jsonvalue)
但是当我尝试将数据发送到云ES服务器时,脚本执行正常,并且在索引几个文档后索引几个文档我得到跟踪错误
Traceback (most recent call last):
File "scriptfile.py", line 78, in <module>
es.index(index='test', doc_type='test123', body=jsonvalue)
File "/usr/local/lib/python2.7/dist-packages/elasticsearch/client/utils.py", line 73, in _wrapped
return func(*args, params=params, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/elasticsearch/client/__init__.py", line 298, in index
_make_path(index, doc_type, id), params=params, body=body)
File "/usr/local/lib/python2.7/dist-packages/elasticsearch/transport.py", line 342, in perform_request
data = self.deserializer.loads(data, headers.get('content-type'))
File "/usr/local/lib/python2.7/dist-packages/elasticsearch/serializer.py", line 76, in loads
return deserializer.loads(s)
File "/usr/local/lib/python2.7/dist-packages/elasticsearch/serializer.py", line 40, in loads
raise SerializationError(s, e)
elasticsearch.exceptions.SerializationError: (u'order=0></iframe>', JSONDecodeError('No JSON object could be decoded: line 1 column 0 (char 0)',))
当我向localhost ES服务器发送数据时,相同的脚本工作正常,我不知道为什么当我向云实例发送数据时它不起作用
请帮帮我
答案 0 :(得分:2)
通过使用批量索引方法解决了这个问题,当我们索引到本地服务器时,如果我们一个接一个地索引文档就不会有问题,但是在索引到云实例时我们必须遵循批量索引方法来克服内存问题和连接问题
如果我们遵循批量索引方法,它会将所有documnets索引到一个弹性搜索中,而不需要一次又一次地打开连接,这不会花费太多时间。
这是我的代码
from elasticsearch import Elasticsearch, helpers
jsonobject= {
'_index': 'index',
'_type': 'index123',
'_source':jsonData
}
actions = [jsonobject]
helpers.bulk(es, actions, chunk_size=1000, request_timeout=200)