command line to rebuild index
This commit is contained in:
27
cookbook/management/commands/rebuildindex.py
Normal file
27
cookbook/management/commands/rebuildindex.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
from django.contrib.postgres.search import SearchVector
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django_scopes import scopes_disabled
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from cookbook.models import Recipe
|
||||||
|
|
||||||
|
|
||||||
|
# can be executed at the command line with 'python manage.py rebuildindex'
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = _('Rebuilds full text search index on Recipe')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
if settings.DATABASES['default']['ENGINE'] not in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']:
|
||||||
|
self.stdout.write(self.style.WARNING(_('Only Postgress databases use full text search, no index to rebuild')))
|
||||||
|
|
||||||
|
try:
|
||||||
|
with scopes_disabled():
|
||||||
|
search_vector = (
|
||||||
|
SearchVector('name', weight='A')
|
||||||
|
+ SearchVector('description', weight='B'))
|
||||||
|
Recipe.objects.all().update(search_vector=search_vector)
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS(_('Recipe index rebuild complete.')))
|
||||||
|
except:
|
||||||
|
self.stdout.write(self.style.ERROR(_('Recipe index rebuild failed.')))
|
@ -20,9 +20,12 @@ class RecipeSearchManager(models.Manager):
|
|||||||
+ SearchVector(StringAgg('steps__ingredients__food__name', delimiter=' '), weight='B', config='english')
|
+ SearchVector(StringAgg('steps__ingredients__food__name', delimiter=' '), weight='B', config='english')
|
||||||
+ SearchVector(StringAgg('keywords__name', delimiter=' '), weight='B', config='english'))
|
+ SearchVector(StringAgg('keywords__name', delimiter=' '), weight='B', config='english'))
|
||||||
search_rank = SearchRank(search_vectors, search_query)
|
search_rank = SearchRank(search_vectors, search_query)
|
||||||
# trigram_similarity = TrigramSimilarity(
|
# the results from trigram were really, really bad
|
||||||
# 'headline', search_text
|
# trigram = (
|
||||||
# )
|
# TrigramSimilarity('name', search_text)
|
||||||
|
# + TrigramSimilarity('description', search_text)
|
||||||
|
# + TrigramSimilarity('steps__ingredients__food__name', search_text)
|
||||||
|
# + TrigramSimilarity('keywords__name', search_text))
|
||||||
return (
|
return (
|
||||||
self.get_queryset()
|
self.get_queryset()
|
||||||
.annotate(search=search_vectors, rank=search_rank)
|
.annotate(search=search_vectors, rank=search_rank)
|
||||||
|
Reference in New Issue
Block a user