builder.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); boolean actuallyRewritten = false; for (BooleanClause clause : this) { rewritten.setMinimumNumberShouldMatch(minimumNumberShouldMatch); for (Map.Entry<Occur, Collection<Query>> entry : clauseSets.entrySet()) { final Occur occur = entry.getKey(); if (modified) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); for (BooleanClause clause : clauses) { if (clause.getOccur() != Occur.FILTER) { builder.setMinimumNumberShouldMatch(Math.max(0, minShouldMatch)); return builder.build(); .setMinimumNumberShouldMatch(minimumNumberShouldMatch); for (Map.Entry<Query,Double> entry : shouldClauses.entrySet()) { Query query = entry.getKey(); .setMinimumNumberShouldMatch(minimumNumberShouldMatch); for (Map.Entry<Query,Double> entry : mustClauses.entrySet()) { Query query = entry.getKey(); .setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()) .add(rewritten, Occur.MUST); for (Query query : clauseSets.get(Occur.SHOULD)) {
private BooleanQuery rewriteNoScoring() { if (clauseSets.get(Occur.MUST).size() == 0) { return this; } BooleanQuery.Builder newQuery = new BooleanQuery.Builder(); newQuery.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); for (BooleanClause clause : clauses) { if (clause.getOccur() == Occur.MUST) { newQuery.add(clause.getQuery(), Occur.FILTER); } else { newQuery.add(clause); } } return newQuery.build(); }
/** * Rebuilds a boolean query and sets a new minimum number should match value. */ private BooleanQuery addMinShouldMatchToBoolean(BooleanQuery query, float fraction) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setMinimumNumberShouldMatch((int) (fraction * query.clauses().size())); for (BooleanClause clause : query) { builder.add(clause); } return builder.build(); }
/** * Constructs a query to retrieve documents that fully contain the input envelope. */ private Query makeWithin(Rectangle bbox) { BooleanQuery.Builder bq = new BooleanQuery.Builder(); BooleanClause.Occur MUST = BooleanClause.Occur.MUST; if (bbox.getCrossesDateLine()) { //use null as performance trick since no data will be beyond the world bounds bq.add(rangeQuery(fieldNameX, null/*-180*/, bbox.getMaxX()), BooleanClause.Occur.SHOULD ); bq.add(rangeQuery(fieldNameX, bbox.getMinX(), null/*+180*/), BooleanClause.Occur.SHOULD ); bq.setMinimumNumberShouldMatch(1);//must match at least one of the SHOULD } else { bq.add(rangeQuery(fieldNameX, bbox.getMinX(), bbox.getMaxX()), MUST); } bq.add(rangeQuery(fieldNameY, bbox.getMinY(), bbox.getMaxY()), MUST); return bq.build(); }
/** * Constructs a query to retrieve documents that fully contain the input envelope. */ private Query makeWithin(Rectangle bbox) { BooleanQuery.Builder bq = new BooleanQuery.Builder(); BooleanClause.Occur MUST = BooleanClause.Occur.MUST; if (bbox.getCrossesDateLine()) { //use null as performance trick since no data will be beyond the world bounds bq.add(rangeQuery(fieldNameX, null/*-180*/, bbox.getMaxX()), BooleanClause.Occur.SHOULD ); bq.add(rangeQuery(fieldNameX, bbox.getMinX(), null/*+180*/), BooleanClause.Occur.SHOULD ); bq.setMinimumNumberShouldMatch(1);//must match at least one of the SHOULD } else { bq.add(rangeQuery(fieldNameX, bbox.getMinX(), bbox.getMaxX()), MUST); } bq.add(rangeQuery(fieldNameY, bbox.getMinY(), bbox.getMaxY()), MUST); return bq.build(); }
private BooleanQuery rewriteNoScoring() { if (clauseSets.get(Occur.MUST).size() == 0) { return this; } BooleanQuery.Builder newQuery = new BooleanQuery.Builder(); newQuery.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); for (BooleanClause clause : clauses) { if (clause.getOccur() == Occur.MUST) { newQuery.add(clause.getQuery(), Occur.FILTER); } else { newQuery.add(clause); } } return newQuery.build(); }
@Override public BooleanQuery readObject(final ObjectInput input) throws IOException, ClassNotFoundException { final boolean disableCoord = input.readBoolean(); final float boost = input.readFloat(); final int minimumNumberShouldMatch = UnsignedNumeric.readUnsignedInt(input); final int numberOfClauses = UnsignedNumeric.readUnsignedInt(input); BooleanQuery.Builder unserialized = new BooleanQuery.Builder() .setDisableCoord(disableCoord) .setMinimumNumberShouldMatch(minimumNumberShouldMatch); assureNumberOfClausesLimit(numberOfClauses); for (int i = 0; i < numberOfClauses; i++) { appendReadClause(input, unserialized); } BooleanQuery booleanQuery = unserialized.build(); booleanQuery.setBoost(boost); return booleanQuery; }
@Override public BooleanQuery readObject(final ObjectInput input) throws IOException, ClassNotFoundException { final boolean disableCoord = input.readBoolean(); final float boost = input.readFloat(); final int minimumNumberShouldMatch = UnsignedNumeric.readUnsignedInt(input); final int numberOfClauses = UnsignedNumeric.readUnsignedInt(input); BooleanQuery.Builder unserialized = new BooleanQuery.Builder() .setDisableCoord(disableCoord) .setMinimumNumberShouldMatch(minimumNumberShouldMatch); assureNumberOfClausesLimit(numberOfClauses); for (int i = 0; i < numberOfClauses; i++) { appendReadClause(input, unserialized); } BooleanQuery booleanQuery = unserialized.build(); booleanQuery.setBoost(boost); return booleanQuery; }
@Override final public Query getQuery(final QueryContext queryContext) throws IOException, ParseException, QueryNodeException, ReflectiveOperationException { final org.apache.lucene.search.BooleanQuery.Builder builder = new org.apache.lucene.search.BooleanQuery.Builder(); if (disableCoord != null) builder.setDisableCoord(disableCoord); if (minimumNumberShouldMatch != null) builder.setMinimumNumberShouldMatch(minimumNumberShouldMatch); if (clauses != null) for (BooleanClause clause : clauses) builder.add(clause.getNewClause(queryContext)); return builder.build(); }
private BooleanQuery rewriteNoScoring() { BooleanQuery.Builder newQuery = new BooleanQuery.Builder(); // ignore disableCoord, which only matters for scores newQuery.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); for (BooleanClause clause : clauses) { if (clause.getOccur() == Occur.MUST) { newQuery.add(clause.getQuery(), Occur.FILTER); } else { newQuery.add(clause); } } return newQuery.build(); }
@Override protected BooleanQuery.Builder newBooleanQuery() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setMinimumNumberShouldMatch(minimumNumberShouldMatch); return builder; }
private static BooleanQuery addClause(BooleanQuery bq, Query query, BooleanClause.Occur occur) { BooleanQuery.Builder newBq = new BooleanQuery.Builder(); newBq.setDisableCoord(bq.isCoordDisabled()); newBq.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch()); for (BooleanClause clause : bq) { newBq.add(clause); } newBq.add(query, occur); return newBq.build(); }
/** * Rebuilds a boolean query and sets a new minimum number should match value. */ private BooleanQuery addMinShouldMatchToBoolean(BooleanQuery query, float fraction) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setMinimumNumberShouldMatch((int) (fraction * query.clauses().size())); for (BooleanClause clause : query) { builder.add(clause); } return builder.build(); }
private static Query westGeoBoundingBoxFilter(double minLat, double minLon, double maxLat, double maxLon, LegacyGeoPointFieldType fieldType, QueryShardContext context) { BooleanQuery.Builder filter = new BooleanQuery.Builder(); filter.setMinimumNumberShouldMatch(1); filter.add(fieldType.lonFieldType().rangeQuery(null, maxLon, true, true, context), Occur.SHOULD); filter.add(fieldType.lonFieldType().rangeQuery(minLon, null, true, true, context), Occur.SHOULD); filter.add(fieldType.latFieldType().rangeQuery(minLat, maxLat, true, true, context), Occur.MUST); return new ConstantScoreQuery(filter.build()); }
void applyMinimum(BooleanQuery.Builder builder, int shouldClauseCount) { if ( minimumShouldMatchConstraint != null ) { int minimumShouldMatch = minimumShouldMatchConstraint.toMinimum( shouldClauseCount ); builder.setMinimumNumberShouldMatch( minimumShouldMatch ); } }
protected Query rewriteBoolean(BooleanQuery bq, IndexSearcher searcher) throws RewriteException, IOException { BooleanQuery.Builder newbq = new BooleanQuery.Builder(); newbq.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch()); for (BooleanClause clause : bq) { BooleanClause.Occur occur = clause.getOccur(); if (occur == BooleanClause.Occur.FILTER) occur = BooleanClause.Occur.MUST; // rewrite FILTER to MUST to ensure scoring newbq.add(rewrite(clause.getQuery(), searcher), occur); } return newbq.build(); }
private BooleanQuery rewriteNoScoring() { BooleanQuery.Builder newQuery = new BooleanQuery.Builder(); // ignore disableCoord, which only matters for scores newQuery.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch()); for (BooleanClause clause : clauses) { if (clause.getOccur() == Occur.MUST) { newQuery.add(clause.getQuery(), Occur.FILTER); } else { newQuery.add(clause); } } return newQuery.build(); }
private static BooleanQuery addClause(BooleanQuery bq, Query query, BooleanClause.Occur occur) { BooleanQuery.Builder newBq = new BooleanQuery.Builder(); newBq.setDisableCoord(bq.isCoordDisabled()); newBq.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch()); for (BooleanClause clause : bq) { newBq.add(clause); } newBq.add(query, occur); return newBq.build(); }
private static Query westGeoBoundingBoxFilter(GeoPoint topLeft, GeoPoint bottomRight, GeoPointFieldMapperLegacy.GeoPointFieldType fieldType) { BooleanQuery.Builder filter = new BooleanQuery.Builder(); filter.setMinimumNumberShouldMatch(1); filter.add(fieldType.lonFieldType().rangeQuery(null, bottomRight.lon(), true, true), Occur.SHOULD); filter.add(fieldType.lonFieldType().rangeQuery(topLeft.lon(), null, true, true), Occur.SHOULD); filter.add(fieldType.latFieldType().rangeQuery(bottomRight.lat(), topLeft.lat(), true, true), Occur.MUST); return new ConstantScoreQuery(filter.build()); }
public static Query applyMinimumShouldMatch(BooleanQuery query, @Nullable String minimumShouldMatch) { if (minimumShouldMatch == null) { return query; } int optionalClauses = 0; for (BooleanClause c : query.clauses()) { if (c.getOccur() == BooleanClause.Occur.SHOULD) { optionalClauses++; } } int msm = calculateMinShouldMatch(optionalClauses, minimumShouldMatch); if (0 < msm) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); for (BooleanClause clause : query) { builder.add(clause); } builder.setMinimumNumberShouldMatch(msm); return builder.build(); } else { return query; } }