thirdparty/google_appengine/google/appengine/ext/search/__init__.py
changeset 1278 a7766286a7be
parent 297 35211afcd563
child 2309 be1b94099f2d
equal deleted inserted replaced
1277:5c931bd3dc1e 1278:a7766286a7be
   258       for keyword in keywords:
   258       for keyword in keywords:
   259         filter = pb.add_filter()
   259         filter = pb.add_filter()
   260         filter.set_op(datastore_pb.Query_Filter.EQUAL)
   260         filter.set_op(datastore_pb.Query_Filter.EQUAL)
   261         prop = filter.add_property()
   261         prop = filter.add_property()
   262         prop.set_name(SearchableEntity._FULL_TEXT_INDEX_PROPERTY)
   262         prop.set_name(SearchableEntity._FULL_TEXT_INDEX_PROPERTY)
       
   263         prop.set_multiple(len(keywords) > 1)
   263         prop.mutable_value().set_stringvalue(unicode(keyword).encode('utf-8'))
   264         prop.mutable_value().set_stringvalue(unicode(keyword).encode('utf-8'))
   264 
   265 
   265     return pb
   266     return pb
       
   267 
       
   268 
       
   269 class SearchableMultiQuery(datastore.MultiQuery):
       
   270   """A multiquery that supports Search() by searching subqueries."""
       
   271 
       
   272   def Search(self, *args, **kwargs):
       
   273     """Add a search query, by trying to add it to all subqueries.
       
   274 
       
   275     Args:
       
   276       args: Passed to Search on each subquery.
       
   277       kwargs: Passed to Search on each subquery.
       
   278 
       
   279     Returns:
       
   280       self for consistency with SearchableQuery.
       
   281     """
       
   282     for q in self:
       
   283       q.Search(*args, **kwargs)
       
   284     return self
   266 
   285 
   267 
   286 
   268 class SearchableModel(db.Model):
   287 class SearchableModel(db.Model):
   269   """A subclass of db.Model that supports full text search and indexing.
   288   """A subclass of db.Model that supports full text search and indexing.
   270 
   289 
   288       self._search_query = search_query
   307       self._search_query = search_query
   289       return self
   308       return self
   290 
   309 
   291     def _get_query(self):
   310     def _get_query(self):
   292       """Wraps db.Query._get_query() and injects SearchableQuery."""
   311       """Wraps db.Query._get_query() and injects SearchableQuery."""
   293       query = db.Query._get_query(self, _query_class=SearchableQuery)
   312       query = db.Query._get_query(self,
       
   313                                   _query_class=SearchableQuery,
       
   314                                   _multi_query_class=SearchableMultiQuery)
   294       if self._search_query:
   315       if self._search_query:
   295         query.Search(self._search_query)
   316         query.Search(self._search_query)
   296       return query
   317       return query
   297 
   318 
   298   def _populate_internal_entity(self):
   319   def _populate_internal_entity(self):