From 3b1ef62c854dcd025a7d0fee0783b1afb0477b11 Mon Sep 17 00:00:00 2001 From: Keith Mitchell Date: Wed, 11 Apr 2012 16:05:14 -0700 Subject: [PATCH] Try using new search for 'related' tab --- r2/r2/controllers/front.py | 35 ++++++++++++++++++----------------- r2/r2/lib/cloudsearch.py | 13 ++++++++----- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/r2/r2/controllers/front.py b/r2/r2/controllers/front.py index 1fe4f73ec..9f9d224c0 100755 --- a/r2/r2/controllers/front.py +++ b/r2/r2/controllers/front.py @@ -633,35 +633,36 @@ class FrontController(RedditController): """The awards page.""" return BoringPage(_("awards"), content = UserAwards()).render() - # filter for removing punctuation which could be interpreted as lucene syntax - related_replace_regex = re.compile('[?\\&|!{}+~^()":*-]+') + # filter for removing punctuation which could be interpreted as search syntax + related_replace_regex = re.compile('[?\\&|!{}+~^()"\':*-]+') related_replace_with = ' ' @base_listing @validate(article = VLink('article')) def GET_related(self, num, article, after, reverse, count): """Related page: performs a search using title of article as - the search query.""" - + the search query. + + """ if not can_view_link_comments(article): abort(403, 'forbidden') - title = c.site.name + ((': ' + article.title) if hasattr(article, 'title') else '') - query = self.related_replace_regex.sub(self.related_replace_with, article.title) - if len(query) > 1024: - # could get fancier and break this into words, but titles - # longer than this are typically ascii art anyway - query = query[0:1023] + query = query[:1024] + query = "|".join(query.split()) + query = "title:'%s'" % query + rel_range = timedelta(days=3) + start = (article._date - rel_range).strftime("%s") + end = (article._date + rel_range).strftime("%s") + query = "(and %s timestamp:%s..%s)" % (query, start, end) + q = SearchQuery(query, raw_sort="-text_relevance", + syntax="cloudsearch") + num, t, pane = self._search(q, num=num, after=after, reverse=reverse, + count=count) - q = RelatedSearchQuery(query, ignore = [article._fullname]) - num, t, pane = self._search(q, - num = num, after = after, reverse = reverse, - count = count) - - return LinkInfoPage(link = article, content = pane, - subtitle = _('related')).render() + return LinkInfoPage(link=article, content=pane, + subtitle=_('related')).render() @base_listing @validate(article = VLink('article')) diff --git a/r2/r2/lib/cloudsearch.py b/r2/r2/lib/cloudsearch.py index ef34ced75..2fa15e343 100644 --- a/r2/r2/lib/cloudsearch.py +++ b/r2/r2/lib/cloudsearch.py @@ -529,7 +529,7 @@ basic_link = functools.partial(basic_query, facets=("reddit",), facet_count=10, basic_subreddit = functools.partial(basic_query, facets=(), size=10, start=0, - rank="relevance", + rank="-activity", return_fields=['title', 'reddit', 'author_fullname'], record_stats=False, @@ -569,7 +569,7 @@ class CloudSearchQuery(object): default_syntax = "plain" lucene_parser = None - def __init__(self, query, sr=None, sort=None, syntax=None): + def __init__(self, query, sr=None, sort=None, syntax=None, raw_sort=None): if syntax is None: syntax = self.default_syntax elif syntax not in self.known_syntaxes: @@ -579,7 +579,10 @@ class CloudSearchQuery(object): self.syntax = syntax self.sr = sr self._sort = sort - self.sort = self.sorts[sort] + if raw_sort: + self.sort = raw_sort + else: + self.sort = self.sorts[sort] self.bq = '' self.results = None @@ -764,8 +767,8 @@ class LinkSearchQuery(CloudSearchQuery): class SubredditSearchQuery(CloudSearchQuery): search_api = g.CLOUDSEARCH_SUBREDDIT_SEARCH_API - sorts = {'relevance': '-text_relevance', - None: '-text_relevance', + sorts = {'relevance': '-activity', + None: '-activity', } sorts_menu_mapping = {'relevance': 1, }