Search: Test new relevance2 relevancy

Use relevance2 relevancy when the link_relevancy feature flag is
enabled.

The new relevancy requires bypassing the l2cs query parser when
possible so that field weights will be properly applied. This also
results in a simplified search query.
This commit is contained in:
Florence Yeun
2015-04-28 12:04:21 -07:00
parent fbe51a79a2
commit cc299d0d3c
2 changed files with 24 additions and 4 deletions

View File

@@ -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

View File

@@ -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: