All queries not covered by the automatic indexes must have a corresponding index defined in the app’s index configuration file. We’ll refer to these as “custom indexes,” in contrast with “automatic indexes.” App Engine needs these hints because building every possible index for every combination of property and sort order would take a gargantuan amount of space and time, and an app isn’t likely to need more than a fraction of those possibilities.
In particular, the following queries require custom indexes:
A query with multiple sort orders
A query with an inequality filter on a property and filters on other properties
A query that uses just equality filters on properties does not need a custom index in most cases thanks to a specialized query algorithm for this case, which we’ll look at in a moment. Also, filters on keys do not require custom indexes; they can operate on whatever indexes are used to fulfill the rest of the query.
Let’s examine these queries and the indexes they require.
The automatic single-property indexes provide enough information for one sort order. When two entities have the same value for the sorted property, the entities appear in the index in adjacent rows, ordered by their entity keys. If you want to order these entities using other criteria, you need an index with more information.
The following query asks for all
sorted first by the
level property in descending order, then, in the case of ...