code: public AnalyzerJob getAnalyzerJob(final String descriptorName, final String analyzerName,
              final String analyzerInputName) {
          List<AnalyzerJob> candidates = new ArrayList<>(_jobs);
  
          // filter analyzers of the corresponding type
          candidates = CollectionUtils2.refineCandidates(candidates, o -> {
              final String actualDescriptorName = o.getDescriptor().getDisplayName();
              return descriptorName.equals(actualDescriptorName);
          });
  
          if (analyzerName != null) {
              // filter analyzers with a particular name
              candidates = CollectionUtils2.refineCandidates(candidates, o -> {
                  final String actualAnalyzerName = o.getName();
                  return analyzerName.equals(actualAnalyzerName);
              });
          }
  
          if (analyzerInputName != null) {
              // filter analyzers with a particular input
              candidates = CollectionUtils2.refineCandidates(candidates, o -> {
                  final InputColumn<?> inputColumn = getIdentifyingInputColumn(o);
                  if (inputColumn == null) {
                      return false;
                  }
  
                  return analyzerInputName.equals(inputColumn.getName());
              });
          }
  
          if (candidates.isEmpty()) {
              logger.error("No more AnalyzerJob candidates to choose from");
              return null;
          } else if (candidates.size() > 1) {
              logger.warn("Multiple ({}) AnalyzerJob candidates to choose from, picking first");
          }
  
          return candidates.iterator().next();
      }
docs: Gets the "best candidate" analyzer job based on search criteria offered
  in parameters.
  
  @param descriptorName
  @param analyzerName
  @param analyzerInputName
  @return