Practice Every Day_8

                今天看视频学了几个小知识点:

            1、用write.deleteDocuments();方法删除一个索引,参数可以是Query,也可以是Term。(这时删除的文档被储存在一个回收站中,可以被恢复)

            2、使用IndexReader进行恢复(恢复时必须把IndexReader的只读(readOnly)设置为false)

            3、将回收站中被删除的数据清空用writer.forceMerge()实现

         视频看累了就上网找了个简单的程序,然后仿照别人的自己写了写,可是运行出来并不是我想要的结果,不管有没有要搜的东西总会打印出第一条内容。

         以下是代码,亲们,帮忙找找错哈 !

  //基础类         

 package myrecorder.telephonenumber.Lucene;
public class Recorder
{
 private int id;
 private String name;
 private String number;
 Recorder(){};
 Recorder(int id,String name,String number)
 {
  this.id=id;
  this.name=name;
  this.number=number; 
 }
 public void setId(int id)
 {
  this.id = id;
 }
 public void setName(String name)
 {
  this.name=name;
 }
 public void setNumber(String number)
 {
  this.number=number; 
 }
 public int  getId()
 {
  return id;
 }
 public String getName()
 {
  return name;
 }
 public String getNumber()
 {
  return number;
 }
}
      

 

//操作类:包含创建索引和搜索的方法

package myrecorder.telephonenumber.Lucene;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

 

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;

public class Operator
{
 private static Directory directory=null;
 private static final Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_35);
 //创建索引
 public void index(List<Recorder> list)
 {
  IndexWriter writer=null;
  try
  {
   directory=FSDirectory.open(new File("f:Lucene/Index_03")); 
   writer=new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,analyzer));
   Document document=new Document();
   for(Recorder re:list)
   {
    Field id=new Field("id",String.valueOf(re.getId()),Field.Store.YES,Field.Index.NOT_ANALYZED);
    Field name=new Field("name",re.getName(),Field.Store.YES,Field.Index.ANALYZED);
    Field number=new Field("number",String.valueOf(re.getNumber()),Field.Store.YES,Field.Index.NOT_ANALYZED);
    document.add(id);
    document.add(name);
    document.add(number);
    writer.addDocument(document);   
   }  
  }
  catch(CorruptIndexException e)
  {
   e.printStackTrace();
  }
  catch (LockObtainFailedException e)
  {
   e.printStackTrace();
  }
   catch(IOException e)
  {
   e.printStackTrace();
  }
  finally
  {
   try
   {
    if(writer!=null)
     writer.close();
   } 
   catch(CorruptIndexException e)
   {
    e.printStackTrace();
   }
   catch(IOException e)
   {
    e.printStackTrace();
   }
     }
 }
 //搜索
public List<Recorder> search(String fieldname,String criteria)
  throws CorruptIndexException, IOException, ParseException
{
 List<Recorder> list=new ArrayList<Recorder>();
    IndexReader reader=IndexReader.open(directory);
    IndexSearcher searcher=new IndexSearcher(reader);
    QueryParser parser=new QueryParser(Version.LUCENE_35,fieldname,analyzer);
    Query query=parser.parse(criteria);
    TopDocs tds=searcher.search(query, 10);
    int total=tds.totalHits;
    System.out.println("共搜索到"+total+"条结果");
    ScoreDoc sds[]=tds.scoreDocs;
    for(int i=0;i<sds.length;i++)
    {
     Document doc=searcher.doc(sds[i].doc); 
     Recorder recorder=new Recorder();
     recorder.setId(Integer.parseInt(doc.get("id")));
     recorder.setName(doc.get("name"));
     recorder.setNumber(doc.get("number"));
     list.add(recorder);
    }
    reader.close();
    searcher.close();
 return list;
}

}

 

 

 

//测试类

package myrecorder.telephonenumber.Lucene;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;

public class Test {

 public static void main(String[] args)
 {
  Test t=new Test();
  t.init();
  t.search();
 }
//以下方法用来初始化文本内容
 public void init()
 {
  List<Recorder> list=new ArrayList<Recorder>(); 
  list.add(new Recorder(01,"李某某","18253512345"));
  list.add(new Recorder(02,"李某某","12345678901"));
  list.add(new Recorder(03,"王某某","18345656567"));
  list.add(new Recorder(04,"孙某某","18253512345"));
  list.add(new Recorder(05,"李某某","12345678901"));
  list.add(new Recorder(06,"王某某","18345656567")); 
  list.add(new Recorder(07,"孙某某","18253512345"));
  //list.add(new Recorder(08,"李某某","12345678901"));
  //list.add(new Recorder(09,"王某某","18345656567"));
  Operator op=new Operator(); 
  op.index(list);
  System.out.println("创建索引完成"); 
    }
 public void search()
 {
  Operator opr=new Operator(); 
  try
  {
   List<Recorder> list=opr.search("name","张某某");
   if(list.size()>0)
    {System.out.println("找到"+list.size()+"个结果");
         for(Recorder recorder:list)
         {
          System.out.println("id="+recorder.getId()+"  name="+
                  recorder.getName()+"  number="+recorder.getNumber());
         }
    }
     else
     {
     System.out.println("没有搜索到结果");
     }
  }
  catch (CorruptIndexException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } catch (ParseException e) { 
            e.printStackTrace(); 
        }  
 }
 }

不知道哪出错了,运行结果总是不对。运行结果如下图所示:

Practice Every Day_8_第1张图片

你可能感兴趣的:(String,list,null,search,Class,query)