You're quite right. This will be fixed in a future release. -Nick Johnson
2009/6/23 acuth <adrian.cuthb...@gmail.com> > > Whenever I've tried doing a SearchableModelDescendant.all > (keys_only=True).search(query) construction, it has failed saying it > doesn't understand the keys_only parameter - see 'Using __key__ and > SearchableModel > http://groups.google.com/group/google-appengine/browse_thread/thread/73dc1dc31bfd497b > > Do you know if this was fixed in a recent release? > > Adrian > > > On Jun 23, 11:33 am, "Nick Johnson (Google)" <nick.john...@google.com> > wrote: > > 2009/6/23 Ian Lewis <ianmle...@gmail.com> > > > > > ogterran, > > > > > It should do one for the search and then one for each item in the > search > > > result. > > > > Not quite - it will do one _query_, and multiple gets. A get is much, > much > > cheaper than a query. You're right about the number of round-trips, > though. > > > > > If you are worried performance on the calls to the datastore you can > modify > > > this code to make the ProductSearchIndex entity be a child of the > Product > > > entity and use a key only query to retrieve only the keys for the > search > > > index entities (since we only really care about the Products anyway). > > > > Good idea! > > > > > > > > > > > > > This will still to the same number of queries but will avoid the > overhead > > > of deserializing the ProductSearchIndex objects (and the associated > index > > > list property which might be long). > > > > > Something like the following should work: > > > > > class Product(db.Model): > > > pid = db.StringProperty(required=True) > > > title = db.StringProperty(required=True) > > > site = db.StringProperty(required=True) > > > url = db.LinkProperty(required=True) > > > > > class ProductSearchIndex(search.SearchableModel): > > > # parent == Product > > > title = db.StringProperty(required=True) > > > > > ... > > > # where you write the Product > > > product = Product(pid = pid, title=title, site=site, url=url) > > > product.put() > > > index = ProductSearchIndex(parent=product, title=title) > > > index.put() > > > > > ... > > > # where you search > > > keys = ProductSearchIndex.all(keys_only=True).search(query).fetch(100) > > > for key in keys: > > > product = Product.get(key.parent()) > > > print product.url > > > > This can be done much more efficiently: > > keys = ProductSearchIndex.all(keys_only=True).search(query).fetch(100) > > products = db.get(x.parent() for x in keys) > > > > Now you're down to just two round-trips! > > > > -Nick Johnson > > > > > > > > > > > > > On Tue, Jun 23, 2009 at 5:59 PM, ogterran <jonathanh...@gmail.com> > wrote: > > > > >> Hi Ian, > > > > >> Thanks for the response. > > >> I have one question on number of datastore calls. > > >> How many datastore calls is the query below making? > > >> Is it 1 or 100? > > > > >> > class Product(db.Model): > > >> > pid = db.StringProperty(required=True) > > >> > title = db.StringProperty(required=True) > > >> > site = db.StringProperty(required=True) > > >> > url = db.LinkProperty(required=True) > > > > >> > class ProductSearchIndex(search.SearchableModel): > > >> > product = db.ReferenceProperty(Product) > > >> > title = db.StringProperty(required=True) > > > > >> query = ProductSearchIndex.all().search(searchtext) > > >> results = query.fetch(100) > > >> for i, v in enumerate(results): > > >> print v.product.url > > > > >> Thanks > > >> Jon > > > > > -- > > > ======================================= > > > 株式会社ビープラウド イアン・ルイス > > > 〒150-0012 > > > 東京都渋谷区広尾1-11-2アイオス広尾ビル604 > > > email: ianmle...@beproud.jp > > > TEL:03-5795-2707 > > > FAX:03-5795-2708 > > >http://www.beproud.jp/ > > > ======================================= > > > > -- > > Nick Johnson, App Engine Developer Programs Engineer > > Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration > Number: > > 368047 > > > -- Nick Johnson, App Engine Developer Programs Engineer Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number: 368047 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---