123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import time
- from django.core.management.base import BaseCommand
- from misago.core.management.progressbar import show_progress
- from misago.core.pgutils import chunk_queryset
- from misago.threads.models import Post
- class Command(BaseCommand):
- help = "Rebuilds posts search"
- def handle(self, *args, **options):
- posts_to_reindex = Post.objects.filter(is_event=False).count()
- if not posts_to_reindex:
- self.stdout.write("\n\nNo posts were found")
- else:
- self.rebuild_posts_search(posts_to_reindex)
- def rebuild_posts_search(self, posts_to_reindex):
- self.stdout.write("Rebuilding search for %s posts...\n" % posts_to_reindex)
- rebuild_count = 0
- show_progress(self, rebuild_count, posts_to_reindex)
- start_time = time.time()
- queryset = Post.objects.select_related("thread").filter(is_event=False)
- for post in chunk_queryset(queryset):
- if post.id == post.thread.first_post_id:
- post.set_search_document(post.thread.title)
- else:
- post.set_search_document()
- post.save(update_fields=["search_document"])
- post.update_search_vector()
- post.save(update_fields=["search_vector"])
- rebuild_count += 1
- show_progress(self, rebuild_count, posts_to_reindex, start_time)
- self.stdout.write("\n\nRebuild search for %s posts" % rebuild_count)
|