Example #1
0
def rebuild_index_for_model(model_, engine_slug_, verbosity_):
    """rebuilds index for a model"""

    search_engine_ = get_engine(engine_slug_)

    local_refreshed_model_count = [0
                                   ]  # HACK: Allows assignment to outer scope.

    def iter_search_entries():
        for obj in model_._default_manager.all().iterator():
            for search_entry in search_engine_._update_obj_index_iter(obj):
                yield search_entry
            local_refreshed_model_count[0] += 1
            if verbosity_ >= 3:
                print("Refreshed search entry for {model} {obj} "
                      "in {engine_slug!r} search engine.".format(
                          model=force_text(model_._meta.verbose_name),
                          obj=force_text(obj),
                          engine_slug=force_text(engine_slug_),
                      ))
        if verbosity_ == 2:
            print(
                "Refreshed {local_refreshed_model_count} {model} search entry(s) "
                "in {engine_slug!r} search engine.".format(
                    model=force_text(model_._meta.verbose_name),
                    local_refreshed_model_count=local_refreshed_model_count[0],
                    engine_slug=force_text(engine_slug_),
                ))

    _bulk_save_search_entries(iter_search_entries())
    return local_refreshed_model_count[0]
Example #2
0
def rebuild_index_for_model(model_, engine_slug_, verbosity_):
    '''rebuilds index for a model'''

    search_engine_ = get_engine(engine_slug_)

    local_refreshed_model_count = [0]  # HACK: Allows assignment to outer scope.
    def iter_search_entries():
        for obj in model_._default_manager.all().iterator():
            for search_entry in search_engine_._update_obj_index_iter(obj):
                yield search_entry
            local_refreshed_model_count[0] += 1
            if verbosity_ >= 3:
                print("Refreshed search entry for {model} {obj} in {engine_slug!r} search engine.".format(
                    model = force_text(model_._meta.verbose_name),
                    obj = force_text(obj),
                    engine_slug = force_text(engine_slug_),
                ))
        if verbosity_ == 2:
            print("Refreshed {local_refreshed_model_count} {model} search entry(s) in {engine_slug!r} search engine.".format(
                model = force_text(model_._meta.verbose_name),
                local_refreshed_model_count = local_refreshed_model_count[0],
                engine_slug = force_text(engine_slug_),
            ))
    _bulk_save_search_entries(iter_search_entries())
    return local_refreshed_model_count[0]
Example #3
0
def rebuild_index_for_model(model_,
                            engine_slug_,
                            verbosity_,
                            slim_=False,
                            batch_size_=100,
                            non_atomic_=False):
    """rebuilds index for a model"""

    search_engine_ = get_engine(engine_slug_)

    local_refreshed_model_count = [0
                                   ]  # HACK: Allows assignment to outer scope.

    def iter_search_entries():
        # Only index specified objects if slim_ is True
        if slim_ and search_engine_._registered_models[
                model_].get_live_queryset():
            obj_list = search_engine_._registered_models[
                model_].get_live_queryset()
        else:
            obj_list = model_._default_manager.all()

        for obj in obj_list.iterator():
            for search_entry in search_engine_._update_obj_index_iter(obj):
                yield search_entry
            local_refreshed_model_count[0] += 1
            if verbosity_ >= 3:
                print("Refreshed search entry for {model} {obj} "
                      "in {engine_slug!r} search engine.".format(
                          model=force_text(model_._meta.verbose_name),
                          obj=force_text(obj),
                          engine_slug=force_text(engine_slug_),
                      ))
        if verbosity_ == 2:
            print(
                "Refreshed {local_refreshed_model_count} {model} search entry(s) "
                "in {engine_slug!r} search engine.".format(
                    model=force_text(model_._meta.verbose_name),
                    local_refreshed_model_count=local_refreshed_model_count[0],
                    engine_slug=force_text(engine_slug_),
                ))

    if non_atomic_:
        _bulk_save_search_entries(iter_search_entries(),
                                  batch_size=batch_size_)
    else:
        with transaction.atomic():
            _bulk_save_search_entries(iter_search_entries(),
                                      batch_size=batch_size_)
    return local_refreshed_model_count[0]