最近在開發站內搜索,以開源的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);
以上代碼只是簡化說明,希望有碰到的朋友可以參考。