package com.plugtree.solradvert.core;
import java.util.Collection;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.DisjunctionMaxQuery;
import org.apache.lucene.search.Query;
import com.plugtree.solradvert.fact.BooleanParentChildRelationship;
import com.plugtree.solradvert.fact.DismaxParentChildRelationship;
public class QueryFactsCollector {
public void collect(Query q, Collection<Object> facts) {
if(BooleanQuery.class.equals(q.getClass())) {
collect((BooleanQuery)q, facts);
} else if(DisjunctionMaxQuery.class.equals(q.getClass())) {
collect((DisjunctionMaxQuery)q, facts);
}
facts.add(q);
}
public void collect(BooleanQuery q, Collection<Object> facts) {
for(BooleanClause clause: q.getClauses()) {
facts.add(new BooleanParentChildRelationship(q, clause));
collect(clause.getQuery(), facts);
}
}
public void collect(DisjunctionMaxQuery q, Collection<Object> facts) {
for(Query qq: q) {
facts.add(new DismaxParentChildRelationship(q, qq));
collect(qq, facts);
}
}
}