diff --git a/r2/r2/controllers/front.py b/r2/r2/controllers/front.py index c5ec7fed2..f12f9a037 100644 --- a/r2/r2/controllers/front.py +++ b/r2/r2/controllers/front.py @@ -1034,6 +1034,9 @@ class FrontController(RedditController): else: sr_num = 0 + if feature.is_enabled('link_relevancy') and sort == 'relevance': + sort = 'relevance2' + content = None subreddits = None nav_menus = None diff --git a/r2/r2/lib/providers/search/cloudsearch.py b/r2/r2/lib/providers/search/cloudsearch.py index f4a5cea74..0df174218 100644 --- a/r2/r2/lib/providers/search/cloudsearch.py +++ b/r2/r2/lib/providers/search/cloudsearch.py @@ -547,7 +547,7 @@ class CloudSearchQuery(object): def __init__(self, query, sr=None, sort=None, syntax=None, raw_sort=None, faceting=None, recent=None, include_over18=True, - rank_expressions=None, start=0, num=1000): + rank_expressions=None, bypass_l2cs=False, start=0, num=1000): if syntax is None: syntax = self.default_syntax elif syntax not in self.known_syntaxes: @@ -574,6 +574,7 @@ class CloudSearchQuery(object): else: self.sort = self.sorts.get(sort) self.rank_expressions = rank_expressions + self.bypass_l2cs = bypass_l2cs # pagination self.start = start @@ -595,9 +596,18 @@ class CloudSearchQuery(object): if self.syntax == "cloudsearch": self.bq = self.customize_query(query) elif self.syntax == "lucene": - bq = l2cs.convert(query, self.lucene_parser) - self.converted_data = {"syntax": "cloudsearch", "converted": bq} - self.bq = self.customize_query(bq) + # For the most part, conversion to cloudsearch structured query syntax + # is not needed, except for fielded searches using ":" and boolean + # searches using AND/OR/NOT (in order to avoid transforming the query) + lucene_operators = (':', ' AND ', ' OR ', ' NOT ') + if (self.bypass_l2cs + and not any(op in query for op in lucene_operators)): + self.q = query.encode('utf-8') + self.bq = self.customize_query() + else: + bq = l2cs.convert(query, self.lucene_parser) + self.converted_data = {"syntax": "cloudsearch", "converted": bq} + self.bq = self.customize_query(bq) elif self.syntax == "plain": self.q = query.encode('utf-8') self.bq = self.customize_query() @@ -712,6 +722,7 @@ class LinkSearchQuery(CloudSearchQuery): search_api = g.CLOUDSEARCH_SEARCH_API sorts = { 'relevance': '-relevance', + 'relevance2': '-relevance2', 'hot': '-hot2', 'top': '-top', 'new': '-timestamp', @@ -734,6 +745,12 @@ class LinkSearchQuery(CloudSearchQuery): known_syntaxes = g.search_syntaxes default_syntax = "lucene" + def __init__(self, *args, **kwargs): + if kwargs.get('sort') == 'relevance2': + kwargs['bypass_l2cs'] = True + kwargs['raw_sort'] = '-relevance2' + super(LinkSearchQuery, self).__init__(*args, **kwargs) + def customize_query(self, bq=u''): queries = [] if bq: