Query returnQuery = query;
if( query instanceof TermQuery ) {
TermQuery termQuery = (TermQuery) query;
Field field = Field.getByName(termQuery.getTerm().field());
Query newQuery = queryVisitor.visit( termQuery, field );
newQuery.setBoost( query.getBoost() );
returnQuery = newQuery;
} else if( query instanceof BooleanQuery ) {
BooleanQuery boolQuery = (BooleanQuery) query;
BooleanQuery newBoolQuery = queryVisitor.visit(boolQuery);
for(BooleanClause boolClause: boolQuery.getClauses()) {
if( ! queryVisitor.visit(boolClause) ) continue;
Query newQuery = accept( boolClause.getQuery(), queryVisitor );
boolClause.setQuery( newQuery );
}
newBoolQuery.setBoost( boolQuery.getBoost() );
newBoolQuery.setMinimumNumberShouldMatch(boolQuery.getMinimumNumberShouldMatch());
returnQuery = newBoolQuery;
}
else if( query instanceof FilteredQuery ) {
FilteredQuery fq = (FilteredQuery) query;
Query newQuery = accept(fq.getQuery(), queryVisitor);
if( newQuery != fq.getQuery() )
{
FilteredQuery newFq = new FilteredQuery(fq.getQuery(), fq.getFilter());
newFq.setBoost( fq.getBoost() );
returnQuery = newFq;
}
}
else if( query instanceof PhraseQuery ) {
PhraseQuery phraseQuery = (PhraseQuery) query;
returnQuery = queryVisitor.visit(phraseQuery);
} else if( query instanceof WildcardQuery ) {
WildcardQuery wildcardQuery = (WildcardQuery) query;
Field field = Field.getByName(wildcardQuery.getTerm().field());
Query newQuery = queryVisitor.visit( wildcardQuery, field );
newQuery.setBoost( query.getBoost() );
returnQuery = newQuery;
} else if( query instanceof PrefixQuery ) {
PrefixQuery prefixQuery = (PrefixQuery) query;
Field field = Field.getByName(prefixQuery.getPrefix().field());
Query newQuery = queryVisitor.visit( prefixQuery, field );
newQuery.setBoost( query.getBoost() );
returnQuery = newQuery;