SearchableModel is workable as long as you have 1 or at most 2 words
in the search, otherwise the indexes 'explode' in size.  You should be
able to mark a field as non-indexed, and non-ascii fields should be
non-indexed by default.  If there were some doctests, this could be
added to gql.py.

Robin

On Feb 17, 10:51 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
> Thank you for sharing this with us.
>
> Robin is our resident expert on GAE. Perhaps this can me incorporated
> into the next version.
>
> Massimo
>
> On Feb 17, 9:59 am, CanPeaceLive <canbar...@gmail.com> wrote:
>
> > Hello ,
> > I've done a couple of patches to use SearchableModel in app engine I
> > would like to ask for feedback, I'm totally new to all app engine
> > python and web2py.
> > Features:
> >   - Specify if a table is searchable (like the migrate argument) with
> > searchable=True
> >   - Specify which properties are searchable or not
> >   - Use search='searchString' argument in select queries
>
> > To achieve these first I've modified the appengine SearchableModel to
> > take unsearchable_properties[] argument so it only indexes specified
> > items, this is useful because app engine indexes things which may not
> > be necessary.  I got the idea from 
> > here:http://www.billkatz.com/2008/8/A-SearchableModel-for-App-Engine
>
> > Next I modified gql.py to import this new SearchableModel.  And look
> > for searchable=True key in SQLTable._create :
> > I put    **args  in __init__  arguments and  provided self.args =
> > args , then :
>
> >  if 'searchable' in self.args and self.args['searchable'] == True :
> >             logging.info('search model called')
> >             if 'unsearchable_properties' in self.args :
> >                 myfields['unsearchable_properties'] = self.args
> > ['unsearchable_properties']
> >             self._tableobj = classobj(self._tablename,
> > (search.SearchableModel, ),
> >                           myfields)
> > else:
> >             logging.info('regular model called')
> >             self._tableobj = classobj(self._tablename,
> > (google_db.Model, ),
> >                                               myfields)
>
> > (by the way python says classobj is deprecated)
>
> > After that to use search='searchString' in database calls:
> > added 'search' in valid_attributes for SQLSet._select then :
>
> >         if 'search' in attributes.keys():
> >             items = search.SearchableModel.Query(table)
> >             items = items.search(attributes['search'])
> >         else:
> >             items = google_db.Query(table)
>
> > It seems to work pretty, I have not  fully tested it, but I hope I'm
> > in right track, it is totally backwards compatible, just not
> > compatible with other databases in parallel. And be warned app engine
> > has bugs related to indexing non-ascii text...
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to