package com.manning.hsia.dvdstore.action.filter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.BooleanClause.Occur;
import org.hibernate.search.annotations.Factory;
/**
* exclude all items reserved for children
*
* Example 8.8
*/
public class NotAChildFilterFactory {
@Factory
public Filter getChildrenFilter() {
Term term = new Term("childrenOnly", "no"); // use flag info
Query query = new TermQuery( term );
Filter filter = new QueryWrapperFilter( query );
return filter;
}
//@Factory
//alternative implementation
/**
* Example 8.9
*/
public Filter getChildrenFilterThroughNegativeQuery() {
Term term = new Term("childrenOnly", "yes");
Query query = new TermQuery( term );
BooleanQuery totalQuery = new BooleanQuery();
totalQuery.add(new MatchAllDocsQuery(), Occur.SHOULD ); //add a term matching all documents
totalQuery.add(query, Occur.MUST_NOT); //exclude elements matching a specific term
Filter filter = new QueryWrapperFilter( totalQuery );
return filter;
}
}