- package org.sam.demo.lucene;
- import java.io.IOException;
- import java.util.BitSet;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.index.TermDocs;
- import org.apache.lucene.search.Filter;
- /**
- * @author Sam
- * @copyright_code 123456789987654321
- * @Date 2008-09-16
- * */
- public class DynamicFilter extends Filter{
- public String fieldValue = "";
- public String fieldKey = "";
- public DynamicFilter(String fieldKey,String security_advanced) {
- super();
- fieldValue = security_advanced;
- this.fieldKey = fieldKey;
- }
- @Override
- public BitSet bits(IndexReader reader) throws IOException {
- /* 這個是過濾一個指定Term 返回其他 */
- final BitSet bits = new BitSet(reader.maxDoc());
- /* 設置一個 bits 的大小 */
- bits.set(0,bits.size()-1);
- Term term = new Term(fieldKey,fieldValue);
- TermDocs termDocs = reader.termDocs(term);
- while(termDocs.next()){
- bits.set(termDocs.doc(),false);
- }
- return bits;
- /* 這個是返回一個指定的 Term */
- /* BitSet result=new BitSet(reader.maxDoc());
- Term term = new Term(this.fieldKey,this.fieldValue);
- TermDocs td=reader.termDocs(term);
- while (td.next())
- {
- result.set(td.doc());
- }
- return result; */
- }
- }
- package org.sam.demo.lucene;
- import java.io.IOException;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.index.CorruptIndexException;
- import org.apache.lucene.index.Term;
- import org.apache.lucene.queryParser.ParseException;
- import org.apache.lucene.queryParser.QueryParser;
- import org.apache.lucene.search.BooleanClause;
- import org.apache.lucene.search.BooleanQuery;
- import org.apache.lucene.search.Hits;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.search.TermsFilter;
- /**
- * @author Sam
- * @copyright_code 123456789987654321
- * @Date 2008-09-16
- * */
- public class AdvancedSearch {
- private final String PATH="E:/Lucene/Index6/";
- /* 關於搜索lucene提供了很多類,基本上需要用的也不多,所以這裏我就寫一些比較常用的! */
- public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
- String[] keys = {"state","city"};
- String[] values = {"CA","Oakland"};
- new AdvancedSearch().booleanSerach(keys,values);
- }
- public void booleanSerach(String[] keys,String[] values) throws CorruptIndexException, IOException, ParseException{
- QueryParser qp = null;
- BooleanQuery bq = null;
- IndexSearcher search = new IndexSearcher(PATH);
- for(int i = 0 ; i < keys.length ; i++){
- qp = new QueryParser(keys[i],new StandardAnalyzer());
- Query tq = qp.parse(values[i]);
- bq = new BooleanQuery();
- bq.add(tq, BooleanClause.Occur.MUST);
- }
- Term t = new Term("fname","Dirk");
- TermsFilter tf = new TermsFilter();
- tf.addTerm(t);
- Hits hits = search.search(bq,new DynamicFilter("fname","Dirk"));
- // Hits hits = search.search(bq,tf);
- System.out.println(hits.length());
- for(int i = 0 ; i < hits.length() ;i++){
- for(int j = 0 ; j < keys.length ; j++)
- System.out.print(hits.doc(i).get(keys[j])+" ");
- System.out.println();
- }
- search.close();
- }
- }