ScorerSupplier subScorer = w.scorerSupplier(context); if (subScorer == null) { if (c.isRequired()) { return null;
if (bc.isRequired()) { if (m == null) { return null;
private BulkScorer requiredBulkScorer(LeafReaderContext context) throws IOException { BulkScorer scorer = null; Iterator<BooleanClause> cIter = query.iterator(); for (Weight w : weights) { BooleanClause c = cIter.next(); if (c.isRequired() == false) { continue; } if (scorer != null) { // we don't have a BulkScorer for conjunctions return null; } scorer = w.bulkScorer(context); if (scorer == null) { // no matches return null; } if (c.isScoring() == false && needsScores) { scorer = disableScoring(scorer); } } return scorer; }
subs.add(e); sum += e.getValue(); } else if (c.isRequired()) { subs.add(Explanation.match(0f, "match on required clause, product of:", Explanation.match(0f, Occur.FILTER + " clause"), e)); shouldMatchCount++; } else if (c.isRequired()) { subs.add(Explanation.noMatch("no match on required clause (" + c.getQuery().toString() + ")", e)); fail = true;
private QueryNode internalParsePositive(List<BooleanClause> list, final String originalStr) throws ParseException { Preconditions.checkArgument(list.size() > 0, "too few terms to build a boolean query"); QueryNode firstQuery = internalParse(list.get(0).getQuery(), null); if (1 == list.size()) { return firstQuery; } if (list.get(1).isRequired()) { return new AndQuery(firstQuery, internalParseBooleanQuery(list.subList(1,list.size()), null)); } else if (list.get(1).isProhibited()) { return new DifferenceQuery(firstQuery, internalParseBooleanQuery(list.subList(1,list.size()), null)); } else { return new OrQuery(firstQuery, internalParseBooleanQuery(list.subList(1,list.size()), null)); } }
private String getBooleanOperator(BooleanClause booleanClause) { return booleanClause.isRequired() ? "AND" : "OR"; } }
private String getBooleanOperator(BooleanClause booleanClause) { return booleanClause.isRequired() ? "AND" : "OR"; } }
/** @return Returns BooleanScorer2 that uses and provides skipTo(), * and scores documents in document number order. */ public Scorer scorer(IndexReader reader) throws IOException { BooleanScorer2 result = new BooleanScorer2(similarity, minNrShouldMatch, allowDocsOutOfOrder); for (int i = 0 ; i < weights.size(); i++) { BooleanClause c = (BooleanClause)clauses.get(i); Weight w = (Weight)weights.get(i); Scorer subScorer = w.scorer(reader); if (subScorer != null) result.add(subScorer, c.isRequired(), c.isProhibited()); else if (c.isRequired()) return null; } return result; }
/** @return Returns BooleanScorer2 that uses and provides skipTo(), * and scores documents in document number order. */ public Scorer scorer(IndexReader reader) throws IOException { BooleanScorer2 result = new BooleanScorer2(similarity, minNrShouldMatch, allowDocsOutOfOrder); for (int i = 0 ; i < weights.size(); i++) { BooleanClause c = (BooleanClause)clauses.get(i); Weight w = (Weight)weights.get(i); Scorer subScorer = w.scorer(reader); if (subScorer != null) result.add(subScorer, c.isRequired(), c.isProhibited()); else if (c.isRequired()) return null; } return result; }
ScorerSupplier subScorer = w.scorerSupplier(context); if (subScorer == null) { if (c.isRequired()) { return null;
if (bc.isRequired()) { if (m == null) { return null;
if (c.isProhibited()) buffer.append("-"); else if (c.isRequired()) buffer.append("+");
if (c.isProhibited()) buffer.append("-"); else if (c.isRequired()) buffer.append("+");
private BulkScorer requiredBulkScorer(LeafReaderContext context) throws IOException { BulkScorer scorer = null; Iterator<BooleanClause> cIter = query.iterator(); for (Weight w : weights) { BooleanClause c = cIter.next(); if (c.isRequired() == false) { continue; } if (scorer != null) { // we don't have a BulkScorer for conjunctions return null; } scorer = w.bulkScorer(context); if (scorer == null) { // no matches return null; } if (c.isScoring() == false && needsScores) { scorer = disableScoring(scorer); } } return scorer; }
private BulkScorer requiredBulkScorer(LeafReaderContext context) throws IOException { BulkScorer scorer = null; Iterator<BooleanClause> cIter = query.iterator(); for (Weight w : weights) { BooleanClause c = cIter.next(); if (c.isRequired() == false) { continue; } if (scorer != null) { // we don't have a BulkScorer for conjunctions return null; } scorer = w.bulkScorer(context); if (scorer == null) { // no matches return null; } if (c.isScoring() == false) { if (needsScores) { scorer = disableScoring(scorer); } } else { assert maxCoord == 1; } } return scorer; }
private BulkScorer requiredBulkScorer(LeafReaderContext context) throws IOException { BulkScorer scorer = null; Iterator<BooleanClause> cIter = query.iterator(); for (Weight w : weights) { BooleanClause c = cIter.next(); if (c.isRequired() == false) { continue; } if (scorer != null) { // we don't have a BulkScorer for conjunctions return null; } scorer = w.bulkScorer(context); if (scorer == null) { // no matches return null; } if (c.isScoring() == false) { if (needsScores) { scorer = disableScoring(scorer); } } else { assert maxCoord == 1; } } return scorer; }
/** * Recursively walks the "from" query pulling out sub-queries and * adding them to the "to" query. * * <p> * Boosts are multiplied as needed. Sub-BooleanQueryies which are not * optional will not be flattened. From will be mangled durring the walk, * so do not attempt to reuse it. * </p> */ public static void flattenBooleanQuery(BooleanQuery to, BooleanQuery from) { for (BooleanClause clause : (List<BooleanClause>)from.clauses()) { Query cq = clause.getQuery(); cq.setBoost(cq.getBoost() * from.getBoost()); if (cq instanceof BooleanQuery && !clause.isRequired() && !clause.isProhibited()) { /* we can recurse */ flattenBooleanQuery(to, (BooleanQuery)cq); } else { to.add(clause); } } }
public Object visit(OrQueryNode node, Object data) throws RepositoryException { BooleanQuery orQuery = new BooleanQuery(); Object[] result = node.acceptOperands(this, null); for (Object aResult : result) { Query operand = (Query) aResult; if (operand instanceof BooleanQuery) { // check if the clauses are all optional, then // we can collapse into the the enclosing orQuery boolean hasNonOptional = false; for (BooleanClause clause : ((BooleanQuery) operand).getClauses()) { if (clause.isProhibited() || clause.isRequired()) { hasNonOptional = true; break; } } if (hasNonOptional) { // cannot collapse orQuery.add(operand, Occur.SHOULD); } else { // collapse for (BooleanClause clause : ((BooleanQuery) operand).getClauses()) { orQuery.add(clause); } } } else { orQuery.add(operand, Occur.SHOULD); } } return orQuery; }
public Object visit(OrQueryNode node, Object data) throws RepositoryException { BooleanQuery orQuery = new BooleanQuery(); Object[] result = node.acceptOperands(this, null); for (Object aResult : result) { Query operand = (Query) aResult; if (operand instanceof BooleanQuery) { // check if the clauses are all optional, then // we can collapse into the the enclosing orQuery boolean hasNonOptional = false; for (BooleanClause clause : ((BooleanQuery) operand).getClauses()) { if (clause.isProhibited() || clause.isRequired()) { hasNonOptional = true; break; } } if (hasNonOptional) { // cannot collapse orQuery.add(operand, Occur.SHOULD); } else { // collapse for (BooleanClause clause : ((BooleanQuery) operand).getClauses()) { orQuery.add(clause); } } } else { orQuery.add(operand, Occur.SHOULD); } } return orQuery; }
if( clause.isProhibited() || !clause.isRequired() || !(clause.getQuery() instanceof TermQuery) ) return super.visit(boolQuery); // only consider required terms