code: protected org.cp.elements.util.search.annotation.Searchable configureMatcher(final org.cp.elements.util.search.annotation.Searchable searchableAnnotation) {
      try {
        if (isCustomMatcherAllowed()) {
          Class<? extends Matcher> matcherClass = searchableAnnotation.matcher();
  
          if (!Matcher.class.equals(matcherClass)) {
            MatcherHolder.set(matcherClass.newInstance());
          }
        }
  
        return searchableAnnotation;
      }
      catch (Exception e) {
        throw new SearchException(String.format(
          "Error occurred creating an instance of Matcher class (%1$s) to be used by this Searcher (%2$s)!"
            + " The Matcher class (%1$s) must have a public no-arg constructor!",
              searchableAnnotation.matcher().getName(), this.getClass().getName()), e);
      }
    }
docs: Configures the desired Matcher used to match and find elements from the @Searchable annotated object based on
  the annotation meta-data, applying only to the calling Thread and only if a custom Matcher is allowed.  The Matcher
  is local to calling Thread during the search operation and does not change the Matcher set on the Searcher.
  
  @param searchableAnnotation the @Searchable annotation meta-data used to determine the desired Matcher used to
  match and find elements during the search operation.
  @return the @Searchable annotation meta-data evaluated, allowing this method call to be chained.
  @see #isCustomMatcherAllowed()
  @see MatcherHolder#set(Matcher)
  @see org.cp.elements.util.search.annotation.Searchable#matcher()