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