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, S s) { scores.put(object, scoredSearch_score(s, preparedTerms)); } void put(A object, Collection fields) { scores.put(object, scoredSearch_score(fields, preparedTerms)); void add(A object) { put(object, str(object)); } L get() { ret takeFirst(maxResults, keysSortedByValuesDesc(scores)); } }