1. A method comprising: receiving, by one or more computers and from a client, a search request, the search request comprising a search query; performing a first search using the search query and one or more search indices stored on a server, the one or more search indices comprising a collection index generated from structured data and a document index generated from unstructured data; receiving, as a result of the first search, a collection of record identifiers, each record identifier comprising a tuple of data including a file identifier identifying a document that is hit by the first search in the unstructured data and a row identifier identifying a record in the structured data, the record having a data field referencing the document; performing a second search using the file identifier and the document index, including retrieving a search hit context from the document, the search hit context comprising one or more words in the document surrounding a term in the search query; merging the record identified by the row identifier and the search hit context into a search result; and providing the search result to the client as a response to the search request.