1. A method comprising, by one or more computing devices: receiving, from a client system of a first user, a search query requesting objects of a first object type, the search query comprising an inner query requesting objects of a second object type, wherein the requested objects are structured documents stored on a plurality of data stores storing objects of a plurality of object types, respectively, wherein each data store only stores objects of a single object type, and wherein each data store comprises an index server coupled to the data store for processing query requests for objects of the particular object type stored on the data store; retrieving, by an index server of a second data store that only stores objects of the second object type, identifiers of one or more objects of the second object type requested by the inner query using an inverted index of the second data store, wherein the index server of the second data store maintains one or more search indices of the objects of the second object type stored on the second data store, and wherein one of the search indices is the inverted index of the second data store; retrieving, by an index server of a first data store that only stores objects of the first object type, for each of the identified one or more objects of the second object type, identifiers of one or more objects of the first object type requested by the search query, the one or more objects of the first object type being identified using an inverted index of the first data store, wherein the index server of the first data store maintains one or more search indices of the objects of the first object type stored on the first data store, and wherein one of the search indices is the inverted index of the first data store; aggregating a plurality of search results responsive to the search query, each search result corresponding to an identified object of the first object type; and sending, to the client system of the first user, one or more of the aggregated search results.