1. A method of searching for data using heterogeneous indices, comprising: receiving a search query; rewriting the search query a plurality of times to obtain a plurality of refined queries; sending the refined queries to a plurality of search engines to search through a plurality of heterogeneous indices, including each of the search engines receiving one of the refined queries; each of the search engines identifying one or more entities responsive to the refined query received by the said each search engine, each of the entities including one or more documents, and wherein the entities identified by the search engines form a set of the entities; merging the entities identified by the search engines by forming a subset of the set of the entities, including for each entity of said set of entities, obtaining an estimated number of the documents of said each entity that would be identified in a search through said each entity to answer said search query; and using the estimated numbers of the documents of each entity that would be identified in a search through said each entity to identify one or more of said entities to put into the subset; sending said subset of entities to a search engine to search said subset of entities to answer said search query; said search engine searching said subset of entities to answer said query and identifying a first group of documents of one or more of the entities of said subset of entities; adding said one or more of the entities of said subset to a specified set; comparing the number of the entities in said specified set with the number of the entities in said subset of entities to a given threshold number; when said number of the entities in the specified set exceeds the number of the entities in the subset by more than the given threshold number, using the search engine to return a second group of documents by searching through the entities of the subset of entities to answer said second query; and when said number of the entities in the specified set does not exceed the number of the entities in the subset by more than the threshold number, forming another subset of the entities and sending said second query and said another subset of the entities to the search engine.