diff -r 5c931bd3dc1e -r a7766286a7be thirdparty/google_appengine/google/appengine/ext/search/__init__.py --- a/thirdparty/google_appengine/google/appengine/ext/search/__init__.py Thu Feb 12 10:24:37 2009 +0000 +++ b/thirdparty/google_appengine/google/appengine/ext/search/__init__.py Thu Feb 12 12:30:36 2009 +0000 @@ -260,11 +260,30 @@ filter.set_op(datastore_pb.Query_Filter.EQUAL) prop = filter.add_property() prop.set_name(SearchableEntity._FULL_TEXT_INDEX_PROPERTY) + prop.set_multiple(len(keywords) > 1) prop.mutable_value().set_stringvalue(unicode(keyword).encode('utf-8')) return pb +class SearchableMultiQuery(datastore.MultiQuery): + """A multiquery that supports Search() by searching subqueries.""" + + def Search(self, *args, **kwargs): + """Add a search query, by trying to add it to all subqueries. + + Args: + args: Passed to Search on each subquery. + kwargs: Passed to Search on each subquery. + + Returns: + self for consistency with SearchableQuery. + """ + for q in self: + q.Search(*args, **kwargs) + return self + + class SearchableModel(db.Model): """A subclass of db.Model that supports full text search and indexing. @@ -290,7 +309,9 @@ def _get_query(self): """Wraps db.Query._get_query() and injects SearchableQuery.""" - query = db.Query._get_query(self, _query_class=SearchableQuery) + query = db.Query._get_query(self, + _query_class=SearchableQuery, + _multi_query_class=SearchableMultiQuery) if self._search_query: query.Search(self._search_query) return query