Hi Google App Engine team,
Lets say I have an Entity with a few properties:
@Entity
public class Animal{
private String domain;
private String kingdom;
private String phylum;
private String class;
private String order;
private String family;
private String genus;
private String species;
private String classifier;
private Date classifiedDate;
private Date dateEntered;
//getters + setters ...
}
If I want to search on say, domain, kingdom, class and dateEntered
with equality google docs suggest I don't need an index, but strangely
on some values - dateEntered = 2007 + any value of the properties I
get
DatastoreNeedIndexException but not for dateEntered = 2006 or 2008. I
would have expected to get the error for all values where an index was
not in place or no error at all. Have i done something wrong here?
Also is it true that I need to specify an index (ok even auto
generated) for every query where a sort order is specified?
so for instance if I want to query on any domain=something ordered by
classifiedDate descending that's one index:
<datastore-index kind="Animal" ancestor="false" >
<property name="domain" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
but if I wanted to query on any domain=something and
kingdom=otherThing ordered by classifiedDate that would be two
indexs:
<datastore-index kind="Animal" ancestor="false" >
<property name="domain" direction="asc"/>
<property name="kingdom" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="kingdom" direction="asc"/>
<property name="domain" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
because app engine treats property ordering as important?
I guess I could always order the query properties myself to ensure no
index is duplicated and then for small numbers of properties this
isn't too bad.
If I wanted to optionally search for kingdoms or domains or both
ordered by classifiedDate the index definition would be
<datastore-index kind="Animal" ancestor="false" >
<property name="domain" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="kingdom" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="domain" direction="asc"/>
<property name="kingdom" direction="asc"/>
<property name="classifiedDate " direction="desc"/>
</datastore-index>
But, If I wanted to search on any combination of, say, 3 properties +
an order field this would be some 8 index definitions,
5 properties + an order would mean 32 definitions.
9 entity properties and order on classifiedDate would be some 512(!!)
different index definitions. If I wanted ascending as well as
descending order on classifiedDate then I have to double that - 1024
definitions. and if I wanted to order on the query (optionally) as
dateEntered ascending or descending instead then thats double again
- 2048. These seems crazy just to query on 9 difference properties.
Or have I got it badly wrong?
Can I just create the 4 indexes :
<datastore-index kind="Animal" ancestor="false" >
<property name="classifiedDate " direction="desc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="classifiedDate " direction="asc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="dateEntered " direction="desc"/>
</datastore-index>
<datastore-index kind="Animal" ancestor="false" >
<property name="dateEntered " direction="asc"/>
</datastore-index>
if I'm doing only equality filters for 9 other fields? Obviously I
don't care about ordering results which will always be
="someEnteredValue".
cheers,
Alex.
--
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.