﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-有时，退一步，能一口气进几步，只是这先退一步需要勇气和自信。-随笔分类-搜索引擎</title><link>http://www.blogjava.net/ducklyl/category/42106.html</link><description>用心爱你，努力工作。&lt;br/&gt;
</description><language>zh-cn</language><lastBuildDate>Tue, 13 Oct 2009 20:20:22 GMT</lastBuildDate><pubDate>Tue, 13 Oct 2009 20:20:22 GMT</pubDate><ttl>60</ttl><item><title>Lucene2.4 多条件过滤</title><link>http://www.blogjava.net/ducklyl/archive/2009/10/13/298089.html</link><dc:creator>王生生</dc:creator><author>王生生</author><pubDate>Tue, 13 Oct 2009 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/ducklyl/archive/2009/10/13/298089.html</guid><wfw:comment>http://www.blogjava.net/ducklyl/comments/298089.html</wfw:comment><comments>http://www.blogjava.net/ducklyl/archive/2009/10/13/298089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ducklyl/comments/commentRss/298089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ducklyl/services/trackbacks/298089.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近在开发站内搜索，以开源的lucene作為基础框架。Lucene可以实现自定义过滤器Filter接口，也可以直接调用lucene已經提供的类。<br />
&nbsp;&nbsp;&nbsp; 本文使用 FilteredQuery 进行多条件过滤。<br />
<br />
import java.util.*;<br />
import org.apache.lucene.index.Term;<br />
import org.apache.lucene.search.*;<br />
<br />
public class ezfilter{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private List&lt;Filter&gt; filterList;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public ezfilter(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; filterList = new ArrayList&lt;Filter&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void addFilter(String Field,String Value){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Term term=new Term(Field,Value);//添加term<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; QueryWrapperFilter filter=new QueryWrapperFilter(new TermQuery(term));//添加过滤器<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; filterList.add(filter);//加入List，可以增加多個过滤<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public Query getFilterQuery(Query query){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;filterList.size();i++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //取出多個过滤器，在结果中再次定位结果<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; query = new FilteredQuery(query, filterList.get(i));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return query;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
}<br />
<br />
在查询时，调用方式如下：<br />
<br />
ezfilter filter = new ezfilter();<br />
filter.addFilter("id","1000");//过滤id=1000<br />
filter.addFilter("type","school");//过滤type=school<br />
.....<br />
query=filter.getFilterQuery(query);//结果过滤<br />
hits = searcher.search(query);<br />
<br />
<br />
以上代码只是简化说明，希望有碰到的朋友可以参考。<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/ducklyl/aggbug/298089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ducklyl/" target="_blank">王生生</a> 2009-10-13 17:28 <a href="http://www.blogjava.net/ducklyl/archive/2009/10/13/298089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>