A method comprising causing a processor communicatively coupled to a memory to execute a search engine carrying out the following steps: a) receiving a request to access target data, wherein the target data is stored in at least one of a plurality of data sources (104, 104a-c), each of the plurality of data sources comprising one or more software modules and assorted hardware for storing data (106, 106a-c), each of the plurality of data sources having a respective candidate index (302a-c) comprised in the processor memory , and wherein a general index (304a-c) is comprised in the processor memory and comprises an index of relationships between data from at least two of the plurality of data sources; wherein each candidate index (302a-c) includes an index of records of the respective data source (104a-c) associated with a candidate which includes two or more data items corresponding to a specific individual or entity, and the relationships between data (302a_1, 302b_1; 302a_2, 302b_2;...) from the at least two data sources are described in the general index by reference to the candidate indexes (302a-c) of the respective data sources (104a-c); b) extracting a plurality of inquiry parameters (404a-c) from the request, wherein each inquiry parameter corresponds to a sub-index (304a-c) of the general index, each sub-index comprising a subset of the general index; c) performing parallel searches of the general index common to the plurality of data sources, wherein each parallel search comprises searching a plurality of the sub-indexes for the general index common to the plurality of data sources based on one or more corresponding inquiry parameters for the plurality of sub-indexes; d) performing one or more additional parallel searches of the candidate indexes based on results of the parallel searches of the general index unioned with the inquiry parameters; e) extracting an output based on results returned from the one or more additional parallel searches of the candidate indexes. a) receiving a request to access target data, wherein the target data is stored in at least one of a plurality of data sources (104, 104a-c), each of the plurality of data sources comprising one or more software modules and assorted hardware for storing data (106, 106a-c), each of the plurality of data sources having a respective candidate index (302a-c) comprised in the processor memory , and wherein a general index (304a-c) is comprised in the processor memory and comprises an index of relationships between data from at least two of the plurality of data sources; wherein each candidate index (302a-c) includes an index of records of the respective data source (104a-c) associated with a candidate which includes two or more data items corresponding to a specific individual or entity, and the relationships between data (302a_1, 302b_1; 302a_2, 302b_2;...) from the at least two data sources are described in the general index by reference to the candidate indexes (302a-c) of the respective data sources (104a-c); b) extracting a plurality of inquiry parameters (404a-c) from the request, wherein each inquiry parameter corresponds to a sub-index (304a-c) of the general index, each sub-index comprising a subset of the general index; c) performing parallel searches of the general index common to the plurality of data sources, wherein each parallel search comprises searching a plurality of the sub-indexes for the general index common to the plurality of data sources based on one or more corresponding inquiry parameters for the plurality of sub-indexes; d) performing one or more additional parallel searches of the candidate indexes based on results of the parallel searches of the general index unioned with the inquiry parameters; e) extracting an output based on results returned from the one or more additional parallel searches of the candidate indexes. <EOS>