Argh, I didn't test it to make sure it actually worked. Is there a bug I can
star for this issue?

2009/6/23 Nick Johnson (Google) <nick.john...@google.com>

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


-- 
=======================================
株式会社ビープラウド  イアン・ルイス
〒150-0012
東京都渋谷区広尾1-11-2アイオス広尾ビル604
email: ianmle...@beproud.jp
TEL:03-5795-2707
FAX:03-5795-2708
http://www.beproud.jp/
=======================================

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

Reply via email to