hi guys,
im having the same problem with multiple tags and an order in the query.
so you are saying that without order i wont have exploding indexes even if i
have 20 keywords im filtering on?
when do you think will you finish your work?
thank you!
On Sep 20, 2010, at 3:57 PM, DevShop wrote:
> Wow, thanks Alfred, this is good info.
>
>> - Remove the sort order
>> - Restrict the # of tag= in your query
>
> OR (choose one) or AND (we have to do both)?
>
> If I just have to remove the sort order from the query and manipulate
> the keys value then I can live with that. But if I have to also
> restrict the number of tags to 5 then I guess I'll have to wait until
> you complete your work since our spec requires up to 10 tags.
>
> Error message when uploading data through the remote API:
>
> google.appengine.api.datastore_errors.BadRequestError: Too many
> indexed
> properties for entity: app: "sampleapp",path < Element { type:
> "Report", id: 6001 }>
>
> This index put it over the limit: entity_type: "Report",ancestor:
> false,
> Property { name: "tags", direction: ASCENDING},Property { name:
> "tags",
> direction: ASCENDING},Property { name: "tags", direction:
> ASCENDING},
> Property { name: "tags", direction: ASCENDING},Property { name:
> "approval_time", direction: DESCENDING}
>
>
> On Sep 20, 11:52 am, Alfred Fuller <[email protected]>
> wrote:
>> Hi,
>>
>> This is the quintessential exploding index problem that I am fixing. The
>> problem is that we don't currently support zigzag merge join and sorting at
>> the same time. You have several options to address this:
>>
>> - Remove the sort order
>> - Slightly worse results until you add it back when I add support for
>> zigzag + sort
>> - Encode the sort order in the key_name
>> - since zigzag results are sorted in key order you can prefix the
>> key_name with a value that will replicate that order (key_names
>> are sorted
>> by lexicographically). This will only work if all the entities
>> in your query
>> either have no parent or the same parent.
>> - Restrict the # of tag= in your query
>> - If you try to sort today you have a upper bound of 5 tags per query
>> (which in turn restricts you to 5 tags per entity). You can get more
>> tags/entity if you further restrict the # of tags in the query.
>>
>> - Alfred
>>
>> On Mon, Sep 20, 2010 at 10:08 AM, DevShop <[email protected]> wrote:
>>>> Do you have 2 list properties? A single list property won't cause
>>> exploding
>>>> indexes. Can you post the whole property?
>>
>>> Thanks for your help!
>>
>>> Do you mean "Can you post the whole class?" ? Here it is, the list
>>> property that explodes is the first property:
>>
>>> class Report(db.Model):
>>
>>> # List of tags for this report, i.e. ['seattle', 'rockroll_rep',
>>> 'rock', 'zztop', 'qwest_field'].
>>> tags = db.ListProperty(basestring, required=True,
>>> validator=are_valid_tags)
>>
>>> status = db.StringProperty(required=True, choices = ['PENDING',
>>> 'APPROVED', 'DECLINED', 'FLAGGED'], default = 'PENDING')
>>
>>> # If status is PENDING, the reason is detailed here
>>> pending_reason = db.TextProperty(default='')
>>
>>> # If status is FLAGGED, the reason is detailed here
>>> flagged_reason = db.TextProperty(default='')
>>
>>> # The report, first line is the headline.
>>> text = db.TextProperty(default='')
>>
>>> # URL with more info about this report.
>>> url = db.StringProperty(default=None, validator=is_valid_url)
>>
>>> # Editor that approved this report. Could be None if report
>>> submitted
>>> from an 'APPROVED' reporter.
>>> editor = db.ReferenceProperty(Reporter,
>>> collection_name='approved_reports', default=None)
>>
>>> # Date/time of insertion of this report into the system.
>>> creation_time = db.DateTimeProperty(auto_now_add=True)
>>
>>> # Date/time of approval of this report, might be the same as
>>> creation_time if it was automatically approved.
>>> approval_time = db.DateTimeProperty(auto_now_add=True)
>>
>>> On Sep 20, 9:35 am, "Ikai Lan (Google)"
>>> <[email protected]<ikai.l%[email protected]>
>>
>>> wrote:
>>>> Do you have 2 list properties? A single list property won't cause
>>> exploding
>>>> indexes. Can you post the whole property?
>>
>>>> --
>>>> Ikai Lan
>>>> Developer Programs Engineer, Google App Engine
>>>> Blogger:http://googleappengine.blogspot.com
>>>> Reddit:http://www.reddit.com/r/appengine
>>>> Twitter:http://twitter.com/app_engine
>>
>>>> On Mon, Sep 20, 2010 at 11:56 AM, DevShop <[email protected]> wrote:
>>>>> Ikai, thanks for the prompt response.
>>
>>>>> Here's our situation: records on entity 'Report' are tagged with
>>>>> multiple keywords ('tags') like: 'music', 'event', 'downtown',
>>>>> 'zz_top', 'concert', 'g_arena', 'september', '2010'. People might
>>>>> search for events downtown in September like this:
>>
>>>>> city.domain.com/tags/event/september/2010/downtown
>>
>>>>> So we are using a 'tags = db.ListProperty(basestring, required=True,
>>>>> validator=are_valid_tags)' in our table with queries like:
>>
>>>>> reports = db.Query(Report).filter('tags =', subdomain)
>>>>> for tag in tags:
>>>>> reports = reports.filter('tags =', tag)
>>>>> reports = reports.order('-approval_time').fetch(int(25))
>>
>>>>> Advice and/or insight would be much appreciated!
>>
>>>>> On Sep 20, 7:59 am, "Ikai Lan (Google)"
>>>>> <[email protected]<ikai.l%[email protected]>
>>> <ikai.l%[email protected] <ikai.l%[email protected]>>
>>
>>>>> wrote:
>>>>>> In general, we do not release ETAs for features. Alfred's
>>> enhancements
>>>>> are
>>>>>> coming in multiple small feature releases over the coming months.
>>
>>>>>> It'd be more practical to post what's causing an exploding index, as
>>>>> there
>>>>>> are probably ways to design around it and still meet your needs.
>>
>>>>>> --
>>>>>> Ikai Lan
>>>>>> Developer Programs Engineer, Google App Engine
>>>>>> Blogger:http://googleappengine.blogspot.com
>>>>>> Reddit:http://www.reddit.com/r/appengine
>>>>>> Twitter:http://twitter.com/app_engine
>>
>>>>>> On Mon, Sep 20, 2010 at 10:49 AM, DevShop <[email protected]>
>>> wrote:
>>>>>>> At the Google IO Conference in May, Alfred Fuller talked about his
>>>>>>> solution for the exploding indexes problem.
>>
>>>>>>> I cannot deploy my app due to an exploding index, just seeding the
>>>>>>> database with initial data triggers the problem.
>>
>>>>>>> Any updates as to when the solution will be deployed by the App
>>> Engine
>>>>>>> team?
>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>> Groups
>>>>>>> "Google App Engine" group.
>>>>>>> To post to this group, send email to
>>> [email protected]
>>>>> .
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> [email protected]<google-appengine%[email protected]>
>>> <google-appengine%[email protected]<google-appengine%[email protected]>
>>
>>>>> <google-appengine%[email protected]<google-appengine%[email protected]>
>>> <google-appengine%[email protected]<google-appengine%[email protected]>
>>
>>>>>>> .
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/google-appengine?hl=en.
>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>> Groups
>>>>> "Google App Engine" group.
>>>>> To post to this group, send email to [email protected]
>>> .
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected]<google-appengine%[email protected]>
>>> <google-appengine%[email protected]<google-appengine%[email protected]>
>>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/google-appengine?hl=en.
>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Google App Engine" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<google-appengine%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-appengine?hl=en.
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en.