Distributed systems are populated by a large number of heterogeneous entities that join and leave the systems dynamically. These entities act as clients and providers and interact with each other in order to get a resource or to achieve a goal. To facilitate the collaboration between entities, the system should provide mechanisms to manage the information about which entities or resources are available in the system at a certain moment, as well as how to locate them in an efficient way. However, this is not an easy task in open and dynamic environments where there are changes in the available resources and global information is not always available. In this paper, we present a comprehensive vision of search in distributed environments. This review not only considers the approaches of the peer-to-peer area, but also the approaches from three more areas: service-oriented environments, multi-agent systems, and complex networks. In these areas, the search for resources, services, or entities plays a key role for the proper performance of the systems built on them. The aim of this analysis is to compare approaches from these areas taking into account the underlying system structure and the algorithms or strategies that participate in the search process.