def search_channels(self): if use_elasticsearch(): ch = ChannelSearch(self.get_locale()) offset, limit = self.get_page() ch.set_paging(offset, limit) ch.search_terms(request.args.get("q", "")) ch.add_filter(filters.verified_channel_boost()) ch.add_filter(filters.negatively_boost_favourites()) if request.args.get("order") == "latest": ch.date_sort("desc") items, total = ch.channels(with_owners=True), ch.total else: # DB fallback date_order = True if request.args.get("order") == "latest" else False items, total = get_db_channels( self.get_locale(), self.get_page(), query=request.args.get("q", ""), date_order=date_order ) return dict(channels=dict(items=items, total=total))
def get_es_channels(locale, paging, category, category_boosts=None, prefix_boosts=None, add_tracking=None, enable_promotion=True): cs = ChannelSearch(locale) cs.set_paging(*paging) # Boost popular channels based on ... if category_boosts: for boost in category_boosts: cs.add_filter(filters.category_boost(*boost)) if prefix_boosts: for boost in prefix_boosts: cs.add_filter(filters.channel_prefix_boost(*boost)) cs.add_filter(filters.boost_from_field_value('editorial_boost')) cs.add_filter(filters.negatively_boost_favourites()) cs.add_filter(filters.channel_rank_boost(locale)) cs.filter_category(category) if enable_promotion: cs.promotion_settings(category) cs.date_sort(request.args.get('date_order')) if request.args.get('user_id'): cs.add_term('owner', request.args.get('user_id')) channels = cs.channels(with_owners=True, add_tracking=add_tracking) return channels, cs.total