最近在开发站内搜索,以开源的lucene作為基础框架。Lucene可以实现自定义过滤器Filter接口,也可以直接调用lucene已經提供的类。
本文使用 FilteredQuery 进行多条件过滤。
import java.util.*;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
public class ezfilter{
private List<Filter> filterList;
public ezfilter(){
filterList = new ArrayList<Filter>();
}
public void addFilter(String Field,String Value){
Term term=new Term(Field,Value);//添加term
QueryWrapperFilter filter=new QueryWrapperFilter(new TermQuery(term));//添加过滤器
filterList.add(filter);//加入List,可以增加多個过滤
}
public Query getFilterQuery(Query query){
for(int i=0;i<filterList.size();i++){
//取出多個过滤器,在结果中再次定位结果
query = new FilteredQuery(query, filterList.get(i));
}
return query;
}
}
在查询时,调用方式如下:
ezfilter filter = new ezfilter();
filter.addFilter("id","1000");//过滤id=1000
filter.addFilter("type","school");//过滤type=school
.....
query=filter.getFilterQuery(query);//结果过滤
hits = searcher.search(query);
以上代码只是简化说明,希望有碰到的朋友可以参考。