apache filter 主要作用是缩小搜索范围,在结果返回之前进行过滤,比较典型的场合是某些文档有多种安全级别,最高级别的文档不能被搜到。
下面是一个例子,作个记录,以备后用。
/**
*只搜索句子中单词数不超过10个的句子
*这个需求当然可以采用NumericRangeQuery来实现,这里的Filter只是做个简单例子
*True 文档返回;false:文档不返回
*/
public class CustomFilter extends Filter{
public static final int LENGTH = 10;
public BigSet bits(IndexReader reader)throws IOException{
BigSet bits = new BigSet(reader.maxDoc());
bits.set(0,bits.size()-1);//先将整个集合置为True,表示所有的文档都能搜索到
Term t = new Term("sentece","lucene");
TermDocs termDocs = reader.termDocs(term);
while(termDocs.next()){
bits.set(termDocs.doc(),false); // 遍历文档,将每个设置为false
}
}
}