最近在開發(fā)站內(nèi)搜索,以開源的lucene作為基礎(chǔ)框架。Lucene可以實(shí)現(xiàn)自定義過濾器Filter接口,也可以直接調(diào)用lucene已經(jīng)提供的類。
本文使用 FilteredQuery 進(jìn)行多條件過濾。
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,可以增加多個(gè)過濾
}
public Query getFilterQuery(Query query){
for(int i=0;i<filterList.size();i++){
//取出多個(gè)過濾器,在結(jié)果中再次定位結(jié)果
query = new FilteredQuery(query, filterList.get(i));
}
return query;
}
}
在查詢時(shí),調(diào)用方式如下:
ezfilter filter = new ezfilter();
filter.addFilter("id","1000");//過濾id=1000
filter.addFilter("type","school");//過濾type=school
.....
query=filter.getFilterQuery(query);//結(jié)果過濾
hits = searcher.search(query);
以上代碼只是簡化說明,希望有碰到的朋友可以參考。