/** See {@link OrcidApiServiceDelegator}{@link #searchByQuery(Map)} */
 @Override
 @VisibilityControl
 public Response searchByQuery(Map<String, List<String>> queryMap) {
   OrcidMessage orcidMessage = orcidSearchManager.findOrcidsByQuery(queryMap);
   List<OrcidSearchResult> searchResults =
       orcidMessage.getOrcidSearchResults() != null
           ? orcidMessage.getOrcidSearchResults().getOrcidSearchResult()
           : null;
   List<OrcidSearchResult> filteredResults = new ArrayList<OrcidSearchResult>();
   OrcidSearchResults orcidSearchResults = new OrcidSearchResults();
   if (searchResults != null) {
     orcidSearchResults.setNumFound(orcidMessage.getOrcidSearchResults().getNumFound());
     if (searchResults.size() > 0) {
       for (OrcidSearchResult searchResult : searchResults) {
         OrcidSearchResult filteredSearchResult = new OrcidSearchResult();
         OrcidProfile filteredProfile = new OrcidProfile();
         filteredSearchResult.setRelevancyScore(searchResult.getRelevancyScore());
         filteredProfile.setOrcid(searchResult.getOrcidProfile().getOrcid());
         filteredProfile.setOrcidId(searchResult.getOrcidProfile().getOrcidId());
         filteredProfile.setOrcidIdentifier(searchResult.getOrcidProfile().getOrcidIdentifier());
         filteredProfile.setOrcidBio(searchResult.getOrcidProfile().getOrcidBio());
         filteredSearchResult.setOrcidProfile(filteredProfile);
         filteredResults.add(filteredSearchResult);
       }
     }
   }
   orcidSearchResults.getOrcidSearchResult().addAll(filteredResults);
   return getOrcidSearchResultsResponse(orcidSearchResults, queryMap.toString());
 }
 @Override
 @VisibilityControl(removeAttributes = false)
 @AccessControl(requiredScope = ScopePathType.READ_PUBLIC, enableAnonymousAccess = true)
 @NonLocked
 public Response findFullDetailsFromPublicCache(String orcid) {
   try {
     OrcidMessage orcidMessage = orcidSearchManager.findPublicProfileById(orcid);
     return getOrcidMessageResponse(orcidMessage, orcid);
   } catch (OrcidSearchException e) {
     LOGGER.warn("Error searching, so falling back to DB", e);
     return findFullDetails(orcid);
   }
 }
 @Override
 @VisibilityControl(removeAttributes = false)
 @AccessControl(requiredScope = ScopePathType.READ_PUBLIC, enableAnonymousAccess = true)
 @NonLocked
 public Response findExternalIdentifiersFromPublicCache(String orcid) {
   try {
     OrcidMessage orcidMessage = orcidSearchManager.findPublicProfileById(orcid);
     if (orcidMessage != null) {
       OrcidProfile orcidProfile = orcidMessage.getOrcidProfile();
       if (orcidProfile != null) {
         orcidProfile.downgradeToExternalIdentifiersOnly();
       }
     }
     return getOrcidMessageResponse(orcidMessage, orcid);
   } catch (OrcidSearchException e) {
     LOGGER.warn("Error searching, so falling back to DB", e);
     return findExternalIdentifiers(orcid);
   }
 }