Exemplo n.º 1
0
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)