querqy.lucene.rewrite.BooleanQueryFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of querqy-lucene Show documentation
Show all versions of querqy-lucene Show documentation
Querqy library for query rewriting for Lucene
The newest version!
/**
*
*/
package querqy.lucene.rewrite;
import java.util.LinkedList;
import java.util.List;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BoostQuery;
import org.apache.lucene.search.Query;
/**
* @author rene
*
*/
public class BooleanQueryFactory implements LuceneQueryFactory {
protected final LinkedList clauses;
protected final boolean normalizeBoost;
public BooleanQueryFactory(final boolean normalizeBoost) {
this.normalizeBoost = normalizeBoost;
clauses = new LinkedList<>();
}
public BooleanQueryFactory(final List clauses, final boolean normalizeBoost) {
this(new LinkedList<>(clauses), normalizeBoost);
}
public BooleanQueryFactory(final LinkedList clauses, final boolean normalizeBoost) {
this.normalizeBoost = normalizeBoost;
this.clauses = clauses;
}
public void add(final LuceneQueryFactory> factory, Occur occur) {
clauses.add(new Clause(factory, occur));
}
public void add(final Clause clause) {
clauses.add(clause);
}
@Override
public void prepareDocumentFrequencyCorrection(final DocumentFrequencyCorrection dfc,
final boolean isBelowDMQ) {
for (final Clause clause : clauses) {
clause.queryFactory.prepareDocumentFrequencyCorrection(dfc, isBelowDMQ);
}
}
@Override
public Query createQuery(final FieldBoost boost, final TermQueryBuilder termQueryBuilder) {
final BooleanQuery.Builder builder = new BooleanQuery.Builder();
for (final Clause clause : clauses) {
builder.add(clause.queryFactory.createQuery(boost, termQueryBuilder), clause.occur);
}
Query bq = builder.build();
if (normalizeBoost) {
int size = getNumberOfClauses();
if (size > 0) {
bq = new BoostQuery(bq, 1f / (float) size);
}
}
return bq;
}
@Override
public R accept(final LuceneQueryFactoryVisitor visitor) {
return visitor.visit(this);
}
public int getNumberOfClauses() {
return clauses.size();
}
public Clause getFirstClause() {
return clauses.getFirst();
}
public static class Clause {
final Occur occur;
final LuceneQueryFactory> queryFactory;
public Clause(final LuceneQueryFactory> queryFactory, final Occur occur) {
if (occur == null) {
throw new IllegalArgumentException("Occur must not be null");
}
this.occur = occur;
this.queryFactory = queryFactory;
}
}
public LinkedList getClauses() {
return clauses;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy