2 """ Contains code for searching podcasts
4 Uses django.contrib.postgres.search for searching. See docs at
5 https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/search/
9 from django
.conf
import settings
11 from mygpo
.podcasts
.models
import Podcast
13 from django
.db
.models
import F
, FloatField
, ExpressionWrapper
14 from django
.contrib
.postgres
.search
import SearchQuery
, SearchRank
15 from django
.conf
import settings
18 logger
= logging
.getLogger(__name__
)
21 SEARCH_CUTOFF
= settings
.SEARCH_CUTOFF
24 def search_podcasts(query
):
25 """ Search for podcasts according to 'query' """
27 logger
.debug('Searching for "{query}" podcasts"', query
=query
)
29 query
= SearchQuery(query
)
31 results
= Podcast
.objects\
33 rank
=SearchRank(F('search_vector'), query
)
36 order
=ExpressionWrapper(
37 F('rank') * F('subscribers'),
38 output_field
=FloatField())
40 .filter(rank__gte
=SEARCH_CUTOFF
)\
43 logger
.debug('Found {count} podcasts for "{query}"', count
=len(results
),