sclass ScoredSearcher { int maxResults = 1000; LS preparedTerms; new Map scores; *(S query, O... _) { maxResults = optPar maxResults(_, maxResults); preparedTerms = scoredSearch_prepare(query); } void put(A object, Collection fields) { scores.put(object, scoredSearch_score(fields, preparedTerms)); } L get() { ret takeFirst(maxResults, keysSortedByValuesDesc(scores)); } }