1. A node in a distributed indexing network in which each node has an address in an index address space and in a separate network address space, said node comprising: machine readable memory for storing program instructions and data structures; one or more processors for executing program instructions stored in said memory; program instructions stored in said memory for: associating a subset of the index address space with the node; maintaining a contact list, which stores the index space and network address for each of a plurality of contacts, each of which is another node in said indexing network; treating a minority of said contact list as direct contacts and the rest of said contacts as indirect contacts; attempting to communicate with each direct contact with a minimum frequency, to determine whether or not that direct contact is still a member of the network; and responding to a determination that a given direct contact is no longer functioning as a member of the network by finding a new direct contact to replace that given contact and replacing the replaced direct contact in the node's contact list with the index and network address of the replacement contact; wherein the node responds to a search request for a given index address that does not fall in the subset of the index address space associated with the node by using, as the next node to send such a search request to, the address on its contact list that is closest to the given address, whether that address is a direct or indirect address.