@ -31,8 +31,7 @@ from whoosh.qparser import MultifieldParser
@@ -31,8 +31,7 @@ from whoosh.qparser import MultifieldParser
class IndexService ( object ) :
def __init__ ( self , config = None , session = None , whoosh_base = None ) :
self . session = session
def __init__ ( self , config = None , whoosh_base = None ) :
if not whoosh_base and config :
whoosh_base = config . get ( " WHOOSH_BASE " )
if not whoosh_base :
@ -60,8 +59,7 @@ class IndexService(object):
@@ -60,8 +59,7 @@ class IndexService(object):
index = whoosh . index . create_in ( index_path , schema )
self . indexes [ model_class . __name__ ] = index
model_class . search_query = Searcher ( model_class , primary , index ,
self . session )
model_class . search_query = Searcher ( model_class , primary , index )
return index
def index_for_model_class ( self , model_class ) :
@ -118,7 +116,6 @@ class IndexService(object):
@@ -118,7 +116,6 @@ class IndexService(object):
we update the whoosh index for the model . If no index exists , it will be
created here ; this could impose a penalty on the initial commit of a model .
"""
for typ , values in self . to_update . items ( ) :
model_class = values [ 0 ] [ 1 ] . __class__
index = self . index_for_model_class ( model_class )
@ -152,21 +149,15 @@ class Searcher(object):
@@ -152,21 +149,15 @@ class Searcher(object):
Assigned to a Model class as ` ` search_query ` ` , which enables text - querying .
"""
def __init__ ( self , model_class , primary , index , session = None ) :
def __init__ ( self , model_class , primary , index ) :
self . model_class = model_class
self . primary = primary
self . index = index
self . session = session
self . searcher = index . searcher ( )
fields = set ( index . schema . _fields . keys ( ) ) - set ( [ self . primary ] )
self . parser = MultifieldParser ( list ( fields ) , index . schema )
def __call__ ( self , query , limit = None ) :
session = self . session
# When using Flask, get the session from the query attached to the model class.
if not session :
session = self . model_class . query . session
def __call__ ( self , session , query , limit = None ) :
results = self . index . searcher ( ) . search (
self . parser . parse ( query ) , limit = limit )