Example #1
0
    def get_model_object_by_instance(self, instance):
        """
        Provide Model object by elasticsearch response instance.
        """
        document = None
        _object = None
        index_or_alias_name = ElasticsearchUtils.get_alias_by_index_name(
            instance.meta.index)
        for doc in registry.get_documents():
            if index_or_alias_name == doc._index._name:  # pylint: disable=protected-access
                document = doc
                break
        hit = self._build_hit(instance)
        es_pk = hit['_source'].get('pk')
        if document and es_pk:
            try:
                _object = document(hit).get_queryset().get(pk=es_pk)
            except ObjectDoesNotExist:
                log.error(
                    "Object could not be found in database for SearchResult '%r'.",
                    self)

        return _object
    def prepare_backend_index(self, registered_index, backend='default'):
        """
        Prepares an index that will be used to store data by the backend.

        Args:
            registered_index (Index): django elasticsearch index instance.
            backend (ElasticsearchSearchBackend): Backend to update.

        Returns:
            (tuple): tuple containing:

                alias(str): Recommended alias for the new index.
                index_name(str): Name of the newly-created index.
        """
        timestamp = datetime.datetime.utcnow().strftime('%Y%m%d_%H%M%S')
        # pylint: disable=protected-access
        computed_alias = ElasticsearchUtils.get_alias_by_index_name(registered_index._name)
        new_index_name = '{alias}_{timestamp}'.format(alias=computed_alias, timestamp=timestamp)
        registered_index._name = new_index_name
        self.stdout.write("Creating index '{}'".format(registered_index._name))
        registered_index.create(using=backend)

        return computed_alias, new_index_name