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