class ElasticStorage(BaseStorage): def __init__(self, config): if not Elasticsearch: raise ImportError("elasticsearch-py is required to use Elasticsearch as storage.") if not Search: raise ImportError("elasticsearch_dsl is required to use Elasticsearch as storage.") self.name = 'elasticsearch' self.storage = Elasticsearch(**config) def keys(self, pattern="*"): return self.storage.keys(pattern) def set_val(self, key, val): body = { 'key': key, 'val': ','.join(map(str, val[0])), 'extra': str(val[1]) } self.storage.index(index='sift', doc_type='sift', body=body) def get_val(self, key): s = Search(using=self.storage, index='sift') return s.filter('term', key=key).execute().hits.hits def append_val(self, key, val): self.set_val(key, val) def get_list(self, key): return self.get_val(key)