@Override protected void addClause(BooleanQuery.Builder topLevel, Term term, int docCount, float boost, TermContext states) { final TermQuery tq = new TermQuery(term, states); topLevel.add(new BoostQuery(tq, boost), BooleanClause.Occur.SHOULD); } }
@Override protected void addClause(BooleanQuery.Builder topLevel, Term term, int docCount, float boost, TermContext states) { final TermQuery tq = new TermQuery(term, states); topLevel.add(new BoostQuery(tq, boost), BooleanClause.Occur.SHOULD); }
@Override public String toString(String field) { StringBuilder builder = new StringBuilder("Blended("); for (int i = 0; i < terms.length; ++i) { if (i != 0) { builder.append(" "); } Query termQuery = new TermQuery(terms[i]); if (boosts[i] != 1f) { termQuery = new BoostQuery(termQuery, boosts[i]); } builder.append(termQuery.toString(field)); } builder.append(")"); return builder.toString(); }
@Override protected void addClause(BooleanQuery.Builder topLevel, Term term, int docFreq, float boost, TermContext states) { final Query q = new ConstantScoreQuery(new TermQuery(term, states)); topLevel.add(new BoostQuery(q, boost), BooleanClause.Occur.SHOULD); } }
@Override public Query rewrite(IndexReader reader) throws IOException { final Query rewritten = query.rewrite(reader); if (boost == 1f) { return rewritten; } if (rewritten.getClass() == BoostQuery.class) { BoostQuery in = (BoostQuery) rewritten; return new BoostQuery(in.query, boost * in.boost); } if (boost == 0f && rewritten.getClass() != ConstantScoreQuery.class) { // so that we pass needScores=false return new BoostQuery(new ConstantScoreQuery(rewritten), 0f); } if (query != rewritten) { return new BoostQuery(rewritten, boost); } return super.rewrite(reader); }
private static Query newSaturationQuery(String fieldName, String featureName, float weight, Float pivot) { if (weight <= 0 || weight > MAX_WEIGHT) { throw new IllegalArgumentException("weight must be in (0, " + MAX_WEIGHT + "], got: " + weight); } if (pivot != null && (pivot <= 0 || Float.isFinite(pivot) == false)) { throw new IllegalArgumentException("pivot must be > 0, got: " + pivot); } Query q = new FeatureQuery(fieldName, featureName, new SaturationFunction(fieldName, featureName, pivot)); if (weight != 1f) { q = new BoostQuery(q, weight); } return q; }
/** * Return a new {@link Query} that will score documents as * {@code weight * Math.log(scalingFactor + S)} where S is the value of the static feature. * @param fieldName field that stores features * @param featureName name of the feature * @param weight weight to give to this feature, must be in (0,64] * @param scalingFactor scaling factor applied before taking the logarithm, must be in [1, +Infinity) * @throws IllegalArgumentException if weight is not in (0,64] or scalingFactor is not in [1, +Infinity) */ public static Query newLogQuery(String fieldName, String featureName, float weight, float scalingFactor) { if (weight <= 0 || weight > MAX_WEIGHT) { throw new IllegalArgumentException("weight must be in (0, " + MAX_WEIGHT + "], got: " + weight); } if (scalingFactor < 1 || Float.isFinite(scalingFactor) == false) { throw new IllegalArgumentException("scalingFactor must be >= 1, got: " + scalingFactor); } Query q = new FeatureQuery(fieldName, featureName, new LogFunction(scalingFactor)); if (weight != 1f) { q = new BoostQuery(q, weight); } return q; }
/** * Return a new {@link Query} that will score documents as * {@code weight * S^a / (S^a + pivot^a)} where S is the value of the static feature. * @param fieldName field that stores features * @param featureName name of the feature * @param weight weight to give to this feature, must be in (0,64] * @param pivot feature value that would give a score contribution equal to weight/2, must be in (0, +Infinity) * @param exp exponent, higher values make the function grow slower before 'pivot' and faster after 'pivot', must be in (0, +Infinity) * @throws IllegalArgumentException if w is not in (0,64] or either k or a are not in (0, +Infinity) */ public static Query newSigmoidQuery(String fieldName, String featureName, float weight, float pivot, float exp) { if (weight <= 0 || weight > MAX_WEIGHT) { throw new IllegalArgumentException("weight must be in (0, " + MAX_WEIGHT + "], got: " + weight); } if (pivot <= 0 || Float.isFinite(pivot) == false) { throw new IllegalArgumentException("pivot must be > 0, got: " + pivot); } if (exp <= 0 || Float.isFinite(exp) == false) { throw new IllegalArgumentException("exp must be > 0, got: " + exp); } Query q = new FeatureQuery(fieldName, featureName, new SigmoidFunction(pivot, exp)); if (weight != 1f) { q = new BoostQuery(q, weight); } return q; }
case FILTER: return new BoostQuery(new ConstantScoreQuery(query), 0); case MUST_NOT: float boost = entry.getValue().floatValue(); if (boost != 1f) { query = new BoostQuery(query, boost); float boost = entry.getValue().floatValue(); if (boost != 1f) { query = new BoostQuery(query, boost); rewritten = new ConstantScoreQuery(rewritten); if (boost != 1f) { rewritten = new BoostQuery(rewritten, boost);
private static Query wrapWithBoost(Query query, float boost) { if (query instanceof MatchNoDocsQuery) { return query; } if (boost != AbstractQueryBuilder.DEFAULT_BOOST) { return new BoostQuery(query, boost); } return query; }
private Query applyBoost(Query q, Float boost) { if (boost != null && boost != 1f) { return new BoostQuery(q, boost); } return q; }
termQueries[i] = new TermQuery(terms[i], contexts[i]); if (boosts[i] != 1f) { termQueries[i] = new BoostQuery(termQueries[i], boosts[i]);
@Override protected Query topLevelQuery(Term[] terms, TermContext[] ctx, int[] docFreqs, int maxDoc) { List<Query> queries = new ArrayList<>(ctx.length); for (int i = 0; i < terms.length; i++) { Query query = new TermQuery(terms[i], ctx[i]); if (boosts != null && boosts[i] != 1f) { query = new BoostQuery(query, boosts[i]); } queries.add(query); } return new DisjunctionMaxQuery(queries, tieBreakerMultiplier); } };
private Query parseAndApply(Type type, String fieldName, Object value, String minimumShouldMatch, Float boostValue) throws IOException { Query query = parse(type, fieldName, value); query = Queries.maybeApplyMinimumShouldMatch(query, minimumShouldMatch); if (query != null && boostValue != null && boostValue != AbstractQueryBuilder.DEFAULT_BOOST && query instanceof MatchNoDocsQuery == false) { query = new BoostQuery(query, boostValue); } return query; }
@Override public Query termQuery(Object value, QueryShardContext context) { Query query = rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context); if (boost() != 1f) { query = new BoostQuery(query, boost()); } return query; }
@Override public Query termQuery(Object value, QueryShardContext context) { failIfNotIndexed(); TermQuery query = new TermQuery(new Term(name(), indexedValueForSearch(value))); if (boost() == 1f || (context != null && context.indexVersionCreated().before(Version.V_5_0_0_alpha1))) { return query; } return new BoostQuery(query, boost()); }
@Override public Query termQuery(Object value, @Nullable QueryShardContext context) { Query query = rangeQuery(value, value, true, true, ShapeRelation.INTERSECTS, null, null, context); if (boost() != 1f) { query = new BoostQuery(query, boost()); } return query; }
@Override public Query termQuery(Object value, QueryShardContext context) { failIfNotIndexed(); Query query = type.termQuery(name(), value); if (boost() != 1f) { query = new BoostQuery(query, boost()); } return query; }
@Override public Query termsQuery(List values, QueryShardContext context) { failIfNotIndexed(); Query query = type.termsQuery(name(), values); if (boost() != 1f) { query = new BoostQuery(query, boost()); } return query; }
@Override public Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, QueryShardContext context) { failIfNotIndexed(); Query query = type.rangeQuery(name(), lowerTerm, upperTerm, includeLower, includeUpper, hasDocValues()); if (boost() != 1f) { query = new BoostQuery(query, boost()); } return query; }