Extends the official Elasticsearch Python API adding Tornado AsyncHTTPClient support.
tornado_elasticsearch is available on the Python Package Index and can be installed using pip or easy_install:
pip install tornado_elasticsearch
from tornado import gen
from tornado import web
from tornado_elasticsearch import AsyncElasticsearch
import uuid
class Example(web.RequestHandler):
def initialize(self):
self.es = AsyncElasticsearch()
@web.asynchronous
@gen.engine
def delete(self, *args, **kwargs):
result = yield self.es.delete(index='test-index', doc_type='tweet',
id=self.get_argument('id'))
self.finish(result)
@web.asynchronous
@gen.engine
def get(self, *args, **kwargs):
if self.get_argument('id', None):
result = yield self.es.get(index='test-index', doc_type='tweet',
id=self.get_argument('id'))
else:
result = yield self.es.search(index='test-index')
self.finish(result)
@web.asynchronous
@gen.engine
def post(self, *args, **kwargs):
doc = {
'author': self.get_current_user() or 'Unknown',
'text': self.get_argument('text'),
'timestamp': datetime.datetime.now()
}
result = yield self.es.index(index='test-index',
doc_type='tweet',
body=doc,
id=str(uuid.uuid4()))
self.finish(result)
class Info(web.RequestHandler):
@web.asynchronous
@gen.engine
def get(self, *args, **kwargs):
es = AsyncElasticsearch()
info = yield es.info()
self.finish(info)
0.5.0: - Bugfixes:
- HTTP Auth
- Add timeout support
- Allow scroll to use post, since scroll_id can be too long
- Fix yield issue
- Add max_clients to AsyncElasticSearch constructor
- Added get_alias
- Added get_mapping
- Add cluster health
0.4.0: Bugfix: Python3 decoding issues
0.3.0: Bugfix: Add body to log_request_fail call (#1)
0.2.0: Bugfix: force method to POST if GET and body passed
0.1.0: Initial version