class ElasticsearchConnection: """ Wrapper class to handle the connection with Elasticsearch. Uses the `CEDAElasticsearchClient <https://github.com/cedadev/ceda-elasticsearch-tools>`_ """ def __init__(self, **kwargs): self.es = CEDAElasticsearchClient(**kwargs) def get_hits(self, index, query=None): return scan(self.es, query=query, index=index) def get_query(self, extensions, path, excludes=[]): query_base = { "_source": { "exclude": ["info.phenomena"] }, "query": { "bool": { "must": [ { "match_phrase_prefix": { "info.directory.analyzed": path } } ], "must_not": [], "filter": [] } } } for ext in extensions: filter = { "term": { "info.type.keyword": ext } } query_base["query"]["bool"]["filter"].append(filter) for exclusion in excludes: query_base["query"]["bool"]["must_not"].append(exclusion) return query_base def bulk(self, iterator, *args, generator=False): if generator: bulk(self.es, iterator(*args), refresh=True) else: bulk(self.es, iterator, refresh=True) def count(self, *args, **kwargs): return self.es.count(*args, **kwargs).get('count') def mget(self, *args, **kwargs): return self.es.mget(*args, **kwargs) def search(self, *args, **kwargs): return self.es.search(*args, **kwargs) def create_collections_index(self, index): return self.es.indices.create(index=index, ignore=400, body={ "mappings": { "properties": { "time_frame": { "type": "date_range" }, "bbox": { "properties": { "coordinates": { "type": "geo_point" } } } } } })
class ElasticsearchConnection: """ Elasticsearch Connection class. Uses `CEDAElasticsearchClient <https://github.com/cedadev/ceda-elasticsearch-tools>`_ :param index: files index (default: settings.ELASTICSEARCH_INDEX) :type index: str """ def __init__(self, index=settings.ELASTICSEARCH_INDEX): self.index = index self.collection_index = settings.ELASTICSEARCH_COLLECTION_INDEX self.es = CEDAElasticsearchClient( **settings.ELASTICSEARCH_CONNECTION_PARAMS) def search(self, query): """ Search the files index :param query: Elasticsearch file query :type query: dict :return: Elasticsearch response :rtype: dict """ return self.es.search(index=self.index, body=query) def search_collections(self, query): """ Search the collections index :param query: Elasticsearch collection query :type query: dict :return: Elasticsearch response :rtype: dict """ return self.es.search(index=self.collection_index, body=query) def count(self, query): """ Return the hit count from the current file query :param query: Elasticsearch file query :type query: dict :return: Elasticsearch count response :rtype: dict """ return self.es.count(index=self.index, body=query) def count_collections(self, query): """ Return the hit count from the current collection query :param query: Elasticsearch collection query :type query: dict :return: Elasticsearch count response :rtype: dict """ return self.es.count(index=self.collection_index, body=query)