Exemple #1
0
def search_records(request):
    """Search model records."""
    model_id = request.matchdict['model_id']
    try:
        request.db.get_model_definition(model_id)
    except ModelNotFound:
        request.response.status = "404 Not Found"
        return {"msg": "%s: model not found" % model_id}

    # So far we just support query from body
    query = request.body
    # Parameters can come from query string
    params = request.GET

    # In case request body arrives as bytes under python 3
    if isinstance(query, six.binary_type):
        query = query.decode('utf-8')

    try:
        results = request.index.search(model_id, query, params=params)
        return results
    except Exception as e:
        logger.error(e)
        request.response.status = "502 Bad Gateway"
        return {"msg": "Could not obtain response from indexing service"}
Exemple #2
0
 def on_model_updated(self, event):
     logger.debug("Update mapping of model '%s'" % event.model_id)
     try:
         self.client.indices.delete_mapping(index=self.prefix(
             event.model_id),
                                            doc_type=event.model_id)
     except ElasticsearchException as e:
         logger.error(e)
     definition = event.request.db.get_model_definition(event.model_id)
     self.__put_mapping(event.model_id, definition)
Exemple #3
0
 def on_record_deleted(self, event):
     logger.debug("Unindex record %s of model '%s'" % (event.record_id,
                                                       event.model_id))
     try:
         self.client.delete(index=self.prefix(event.model_id),
                            doc_type=event.model_id,
                            id=event.record_id,
                            refresh=True)
     except ElasticsearchException as e:
         logger.error(e)
Exemple #4
0
 def on_record_deleted(self, event):
     logger.debug("Unindex record %s of model '%s'" %
                  (event.record_id, event.model_id))
     try:
         self.client.delete(index=self.prefix(event.model_id),
                            doc_type=event.model_id,
                            id=event.record_id,
                            refresh=True)
     except ElasticsearchException as e:
         logger.error(e)
Exemple #5
0
 def delete_indices(self):
     logger.debug("Drop the index on database deleted event.")
     try:
         fullnames = self.client.cat.indices().split('\n')[:-1]
         indices = [x.split()[1] for x in fullnames]
         prefixed_indices = [indice for indice in indices
                             if indice.startswith(self.prefix(''))]
         if len(prefixed_indices) > 0:
             self.client.indices.delete(index=','.join(prefixed_indices))
     except ElasticsearchException as e:
         logger.error(e)
Exemple #6
0
 def on_model_updated(self, event):
     logger.debug("Update mapping of model '%s'" % event.model_id)
     try:
         self.client.indices.delete_mapping(
             index=self.prefix(event.model_id),
             doc_type=event.model_id
         )
     except ElasticsearchException as e:
         logger.error(e)
     definition = event.request.db.get_model_definition(event.model_id)
     self.__put_mapping(event.model_id, definition)
Exemple #7
0
    def on_model_created(self, event):
        indexname = self.prefix(event.model_id)
        try:
            if not self.client.indices.exists(index=indexname):
                logger.debug("Create index for model '%s'" % event.model_id)
                self.client.indices.create(index=self.prefix(event.model_id))
        except ElasticsearchException as e:
            logger.error(e)

        logger.debug("Create mapping for model '%s'" % event.model_id)
        definition = event.request.db.get_model_definition(event.model_id)
        self.__put_mapping(event.model_id, definition)
Exemple #8
0
    def on_model_created(self, event):
        indexname = self.prefix(event.model_id)
        try:
            if not self.client.indices.exists(index=indexname):
                logger.debug("Create index for model '%s'" % event.model_id)
                self.client.indices.create(index=self.prefix(event.model_id))
        except ElasticsearchException as e:
            logger.error(e)

        logger.debug("Create mapping for model '%s'" % event.model_id)
        definition = event.request.db.get_model_definition(event.model_id)
        self.__put_mapping(event.model_id, definition)
Exemple #9
0
 def __put_mapping(self, model_id, definition):
     """ Transforms the model definition into an Elasticsearch mapping,
     and associate to its index.
     """
     mapping_definition = self._definition_as_mapping(definition)
     try:
         mapping = self.client.indices.put_mapping(
             index=self.prefix(model_id),
             doc_type=model_id,
             body=mapping_definition)
         return mapping
     except ElasticsearchException as e:
         logger.error(e)
Exemple #10
0
 def search(self, model_id, query, params):
     supported_params = ['sort', 'from', 'source', 'fields', 'size']
     params = dict([p for p in params.items() if p[0] in supported_params])
     try:
         return self.client.search(index=self.prefix(model_id),
                                   doc_type=model_id,
                                   body=query,
                                   **params)
     except RequestError as e:
         raise SearchError(*e.args)
     except ElasticsearchException as e:
         logger.error(e)  # big fail
         raise
Exemple #11
0
 def search(self, model_id, query, params):
     supported_params = ['sort', 'from', 'source', 'fields', 'size']
     params = dict([p for p in params.items() if p[0] in supported_params])
     try:
         return self.client.search(index=self.prefix(model_id),
                                   doc_type=model_id,
                                   body=query,
                                   **params)
     except RequestError as e:
         raise SearchError(*e.args)
     except ElasticsearchException as e:
         logger.error(e)  # big fail
         raise
Exemple #12
0
 def delete_indices(self):
     logger.debug("Drop the index on database deleted event.")
     try:
         fullnames = self.client.cat.indices().split('\n')[:-1]
         indices = [x.split()[1] for x in fullnames]
         prefixed_indices = [
             indice for indice in indices
             if indice.startswith(self.prefix(''))
         ]
         if len(prefixed_indices) > 0:
             self.client.indices.delete(index=','.join(prefixed_indices))
     except ElasticsearchException as e:
         logger.error(e)
Exemple #13
0
 def __put_mapping(self, model_id, definition):
     """ Transforms the model definition into an Elasticsearch mapping,
     and associate to its index.
     """
     mapping_definition = self._definition_as_mapping(definition)
     try:
         mapping = self.client.indices.put_mapping(
             index=self.prefix(model_id),
             doc_type=model_id,
             body=mapping_definition
         )
         return mapping
     except ElasticsearchException as e:
         logger.error(e)
Exemple #14
0
 def __index(self, model_id, definition, record_id, record):
     """ Transforms the record to an ElasticSearch record compatible with
     the mapping built from its model definition.
     """
     mapping_record = self._record_as_mapping(definition, record)
     try:
         index = self.client.index(index=self.prefix(model_id),
                                   doc_type=model_id,
                                   id=record_id,
                                   body=mapping_record,
                                   refresh=True)
         return index
     except ElasticsearchException as e:
         logger.error(e)
Exemple #15
0
 def __index(self, model_id, definition, record_id, record):
     """ Transforms the record to an ElasticSearch record compatible with
     the mapping built from its model definition.
     """
     mapping_record = self._record_as_mapping(definition, record)
     try:
         index = self.client.index(index=self.prefix(model_id),
                                   doc_type=model_id,
                                   id=record_id,
                                   body=mapping_record,
                                   refresh=True)
         return index
     except ElasticsearchException as e:
         logger.error(e)
Exemple #16
0
 def on_model_deleted(self, event):
     logger.debug("Delete index of model '%s'" % event.model_id)
     try:
         self.client.indices.delete(index=self.prefix(event.model_id))
     except ElasticsearchException as e:
         logger.error(e)
Exemple #17
0
 def on_model_deleted(self, event):
     logger.debug("Delete index of model '%s'" % event.model_id)
     try:
         self.client.indices.delete(index=self.prefix(event.model_id))
     except ElasticsearchException as e:
         logger.error(e)