1. A method comprising: generating an index mapping data objects to terms associated with the data objects; generating a graph describing hierarchical relationships between each of the data objects; receiving a search request comprising a plurality of search terms; based on the index, calculating multiple candidate sets of data objects by, for each particular term in the plurality of search terms, identifying a particular candidate set of data objects that are mapped to the particular term; calculating priority scores for at least the data objects in the candidate sets based at least in part on one or more of: a link analysis of the graph; or metadata describing structural constraints upon the data objects; based on the graph, identifying one or more search result subgraphs, wherein each particular subgraph of the one or more search result subgraphs is a hierarchy of data objects that comprises, for each particular term, at least one data object mapped to the particular term in the index; wherein identifying the one or more search result subgraphs comprises investigating the hierarchical relationships described by the graph, in an order that is based on the priority scores, to locate at least one ancestor object that, for each particular candidate set, is the same as, or an ancestor of, at least one member object of that particular candidate set; providing information indicating the one or more search result subgraphs in response to the search request; wherein the method is performed by one or more computing devices.