def pre_index(self, *args, mode, **kwargs): client = AsyncElasticsearch(**self.es_client_args) try: if mode in ("index", None): # index MUST NOT exist # ---------------------- if (yield from client.indices.exists(self.es_index_name)): msg = ( "Index '%s' already exists, (use mode='purge' to " "auto-delete it or mode='resume' to add more documents)" ) raise IndexerException(msg % self.es_index_name) elif mode in ("resume", "merge"): # index MUST exist # ------------------ if not (yield from client.indices.exists(self.es_index_name)): raise IndexerException("'%s' does not exist." % self.es_index_name) self.logger.info(("Exists", self.es_index_name)) return # skip index creation elif mode == "purge": # index MAY exist # ----------------- response = yield from client.indices.delete( self.es_index_name, ignore_unavailable=True) self.logger.info(("Deleted", self.es_index_name, response)) else: raise ValueError("Invalid mode: %s" % mode) response = yield from client.indices.create( self.es_index_name, body={ "settings": (yield from self.es_index_settings.finalize(client)), "mappings": (yield from self.es_index_mappings.finalize(client)) }) self.logger.info(("Created", self.es_index_name, response)) return { '__REPLACE__': True, 'host': self.es_client_args.get('hosts'), # for frontend display 'environment': self.env_name, # used in snapshot module. } finally: yield from client.close()
def _validate_mapping(): client = AsyncElasticsearch(**indexer.es_client_args) index_name = ("hub_tmp_%s" % get_random_string()).lower() try: return (yield from client.indices.create( index_name, body={ "settings": (yield from indexer.es_index_settings.finalize(client)), "mappings": (yield from indexer.es_index_mappings.finalize(client)) })) finally: yield from client.indices.delete(index_name, ignore_unavailable=True) yield from client.close()
results = await es.search(index=index_name, body={ "query": { "bool": { "filter": { "bool": { "should": [{ "term": { "position": 1 } }, { "term": { "position": 2 } }] } } } } }) pprint(results) await es.indices.delete(index_name) if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.run_until_complete(es.close())