Code with Misuse: |
class BooleanQuery.BooleanWeight { public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException { List required = new ArrayList(); List prohibited = new ArrayList(); List optional = new ArrayList(); for (Iterator wIter = weights.iterator(), cIter = clauses.iterator(); wIter.hasNext();) { Weight w = (Weight) wIter.next(); BooleanClause c = (BooleanClause) cIter.next(); Scorer subScorer = w.scorer(reader, true, false); if (subScorer == null) { if (c.isRequired()) { return null; } } else if (c.isRequired()) { required.add(subScorer); } else if (c.isProhibited()) { prohibited.add(subScorer); } else { optional.add(subScorer); } } // Check if we can return a BooleanScorer scoreDocsInOrder |= !allowDocsOutOfOrder; // until it is removed, factor in the static setting. if (!scoreDocsInOrder && topScorer && required.size() == 0 && prohibited.size() < 32) { return new BooleanScorer(similarity, minNrShouldMatch, optional, prohibited); } if (required.size() == 0 && optional.size() == 0) { // no required and optional clauses. return null; } else if (optional.size() < minNrShouldMatch) { // either >1 req scorer, or there are 0 req scorers and at least 1 // optional scorer. Therefore if there are not enough optional scorers // no documents will be matched by the query return null; } // Return a BooleanScorer2 return new BooleanScorer2(similarity, minNrShouldMatch, required, prohibited, optional); }
}
|