mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #420 from martenson/ts-search-adjustments
allow setting of page_size in the ts search request
This commit is contained in:
@@ -330,6 +330,9 @@ class RepositoriesController( BaseAPIController ):
|
||||
:param page: (optional)requested page of the search
|
||||
:type page: int
|
||||
|
||||
:param page_size: (optional)requested page_size of the search
|
||||
:type page_size: int
|
||||
|
||||
:param jsonp: (optional)flag whether to use jsonp format response, defaults to False
|
||||
:type jsonp: bool
|
||||
|
||||
@@ -357,13 +360,15 @@ class RepositoriesController( BaseAPIController ):
|
||||
q = kwd.get( 'q', '' )
|
||||
if q:
|
||||
page = kwd.get( 'page', 1 )
|
||||
page_size = kwd.get( 'page_size', 10 )
|
||||
try:
|
||||
page = int( page )
|
||||
page_size = int( page_size )
|
||||
except ValueError:
|
||||
raise RequestParameterInvalidException( 'The "page" requested has to be an integer.' )
|
||||
raise RequestParameterInvalidException( 'The "page" and "page_size" parameters have to be integers.' )
|
||||
return_jsonp = util.asbool( kwd.get( 'jsonp', False ) )
|
||||
callback = kwd.get( 'callback', 'callback' )
|
||||
search_results = self._search( trans, q, page )
|
||||
search_results = self._search( trans, q, page, page_size )
|
||||
if return_jsonp:
|
||||
response = str( '%s(%s);' % ( callback, json.dumps( search_results ) ) )
|
||||
else:
|
||||
@@ -387,7 +392,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
repository_dicts.append( repository_dict )
|
||||
return json.dumps( repository_dicts )
|
||||
|
||||
def _search( self, trans, q, page=1 ):
|
||||
def _search( self, trans, q, page=1, page_size=10 ):
|
||||
"""
|
||||
Perform the search over TS repositories.
|
||||
Note that search works over the Whoosh index which you have
|
||||
@@ -422,6 +427,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
results = repo_search.search( trans,
|
||||
search_term,
|
||||
page,
|
||||
page_size,
|
||||
boosts )
|
||||
results[ 'hostname' ] = web.url_for( '/', qualified = True )
|
||||
return results
|
||||
|
||||
@@ -28,6 +28,9 @@ class ToolsController( BaseAPIController ):
|
||||
:param page: (optional)requested page of the search
|
||||
:type page: int
|
||||
|
||||
:param page_size: (optional)requested page_size of the search
|
||||
:type page_size: int
|
||||
|
||||
:param jsonp: (optional)flag whether to use jsonp format response, defaults to False
|
||||
:type jsonp: bool
|
||||
|
||||
@@ -46,20 +49,22 @@ class ToolsController( BaseAPIController ):
|
||||
raise NotImplemented( 'Listing of all the tools is not implemented. Provide parameter "q" to search instead.' )
|
||||
else:
|
||||
page = kwd.get( 'page', 1 )
|
||||
page_size = kwd.get( 'page_size', 10 )
|
||||
try:
|
||||
page = int( page )
|
||||
page_size = int ( page_size )
|
||||
except ValueError:
|
||||
raise RequestParameterInvalidException( 'The "page" requested has to be an integer.' )
|
||||
raise RequestParameterInvalidException( 'The "page" and "page_size" have to be integers.' )
|
||||
return_jsonp = util.asbool( kwd.get( 'jsonp', False ) )
|
||||
callback = kwd.get( 'callback', 'callback' )
|
||||
search_results = self._search( trans, q, page )
|
||||
search_results = self._search( trans, q, page, page_size )
|
||||
if return_jsonp:
|
||||
response = str( '%s(%s);' % ( callback, json.dumps( search_results ) ) )
|
||||
else:
|
||||
response = json.dumps( search_results )
|
||||
return response
|
||||
|
||||
def _search( self, trans, q, page=1 ):
|
||||
def _search( self, trans, q, page=1, page_size=10 ):
|
||||
"""
|
||||
Perform the search over TS tools index.
|
||||
Note that search works over the Whoosh index which you have
|
||||
@@ -90,6 +95,7 @@ class ToolsController( BaseAPIController ):
|
||||
results = tool_search.search( trans,
|
||||
search_term,
|
||||
page,
|
||||
page_size,
|
||||
boosts )
|
||||
results[ 'hostname' ] = web.url_for( '/', qualified = True )
|
||||
return results
|
||||
|
||||
@@ -37,8 +37,6 @@ class RepoWeighting( scoring.BM25F ):
|
||||
use_final = True
|
||||
|
||||
def final( self, searcher, docnum, score ):
|
||||
# log.debug('score before: ' + str(score) )
|
||||
|
||||
# Arbitrary for now
|
||||
reasonable_hits = 100.0
|
||||
|
||||
@@ -51,21 +49,18 @@ class RepoWeighting( scoring.BM25F ):
|
||||
if times_downloaded == 0:
|
||||
times_downloaded = 1
|
||||
popularity_modifier = ( times_downloaded / reasonable_hits )
|
||||
# log.debug('popularity_modifier: ' + str(popularity_modifier) )
|
||||
|
||||
cert_modifier = 2 if searcher.stored_fields( docnum )[ "approved" ] == 'yes' else 1
|
||||
# log.debug('cert_modifier: ' + str(cert_modifier) )
|
||||
|
||||
# Adjust the computed score for this document by the popularity
|
||||
# and by the certification level.
|
||||
final_score = score * popularity_modifier * cert_modifier
|
||||
# log.debug('score after: ' + str( final_score ) )
|
||||
return final_score
|
||||
|
||||
|
||||
class RepoSearch( object ):
|
||||
|
||||
def search( self, trans, search_term, page, boosts ):
|
||||
def search( self, trans, search_term, page, page_size, boosts ):
|
||||
"""
|
||||
Perform the search on the given search_term
|
||||
|
||||
@@ -103,7 +98,7 @@ class RepoSearch( object ):
|
||||
user_query = parser.parse( '*' + search_term + '*' )
|
||||
|
||||
try:
|
||||
hits = searcher.search_page( user_query, page, pagelen = 10, terms = True )
|
||||
hits = searcher.search_page( user_query, page, pagelen = page_size, terms = True )
|
||||
except ValueError:
|
||||
raise ObjectNotFound( 'The requested page does not exist.' )
|
||||
|
||||
@@ -112,6 +107,8 @@ class RepoSearch( object ):
|
||||
log.debug( 'scored hits: ' + str( hits.scored_length() ) )
|
||||
results = {}
|
||||
results[ 'total_results'] = str( len( hits ) )
|
||||
results[ 'page'] = str( page )
|
||||
results[ 'page_size'] = str( page_size )
|
||||
results[ 'hits' ] = []
|
||||
for hit in hits:
|
||||
hit_dict = {}
|
||||
|
||||
@@ -31,7 +31,7 @@ tool_schema = Schema(
|
||||
|
||||
class ToolSearch( object ):
|
||||
|
||||
def search( self, trans, search_term, page, boosts ):
|
||||
def search( self, trans, search_term, page, page_size, boosts ):
|
||||
"""
|
||||
Perform the search on the given search_term
|
||||
|
||||
@@ -63,7 +63,7 @@ class ToolSearch( object ):
|
||||
user_query = parser.parse( '*' + search_term + '*' )
|
||||
|
||||
try:
|
||||
hits = searcher.search_page( user_query, page, pagelen = 10, terms = True )
|
||||
hits = searcher.search_page( user_query, page, pagelen = page_size, terms = True )
|
||||
except ValueError:
|
||||
raise ObjectNotFound( 'The requested page does not exist.' )
|
||||
|
||||
@@ -72,6 +72,8 @@ class ToolSearch( object ):
|
||||
log.debug( 'scored hits: ' + str( hits.scored_length() ) )
|
||||
results = {}
|
||||
results[ 'total_results'] = str( len( hits ) )
|
||||
results[ 'page'] = str( page )
|
||||
results[ 'page_size'] = str( page_size )
|
||||
results[ 'hits' ] = []
|
||||
for hit in hits:
|
||||
hit_dict = {}
|
||||
|
||||
Reference in New Issue
Block a user