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