package com.bipt.filter; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermDocs; public class LuceneTest { public static void main(String[] args){ LuceneTest lt = new LuceneTest(); try { // lt.createIndex(); lt.readIndex(); } catch (IOException e) { System.out.println("有错!"); e.printStackTrace(); } } public void createIndex() throws IOException{ //第一步,准备好数据源Field //在这里,我们对书名,书号等做了数据源处理 Field bookname = new Field("bookname","简明科学史",Field.Store.YES,Field.Index.TOKENIZED); Field bookNo = new Field("bookNo","001",Field.Store.YES,Field.Index.UN_TOKENIZED); Field bookMarks = new Field("bookMarks","这是一本年轻人应该看的书!",Field.Store.NO,Field.Index.TOKENIZED); Field publishdate = new Field("publishdate","2010-12-12",Field.Store.YES,Field.Index.NO); Field author = new Field("author","匿名",Field.Store.YES,Field.Index.TOKENIZED); //第二步,准备好物理文件Document Document doc = new Document(); //第三步,将准备好的数据源Field加入到物理文件Document中去 doc.add(bookname); doc.add(bookNo); doc.add(bookMarks); doc.add(publishdate); doc.add(author); //第四步,new一个IndexWriter,并将物理文件document加载进indexWriter里去 //这里用到IndexWriter的一个构造方法 //第一个参数是索引的存储路径;(注意写绝对路径时与Windows的区别——反斜杠“/”) //第二个参数是用什么分词器进行分词; //第三个表示是否覆盖原有的索引(如果存在话)。 IndexWriter iw = new IndexWriter("E:/luceneIndex", new StandardAnalyzer(),true); //注意:在这个时候,调用了DocumentWriter的一系列方法 //来对数据源进行分词、计算出现频率和位置、以及写索引的过程 iw.addDocument(doc); iw.close();//注意使用完成后,一定要关闭,否则会出现线程错误或者内存不足 } public void readIndex() throws IOException{ IndexReader ir = IndexReader.open("E:/luceneIndex"); System.out.println("显示文档列表:"); for(int i=0;i<ir.numDocs();i++){ System.out.println(ir.document(i)); } System.out.println("查询关键字“科学”"); Term t = new Term("bookname","科学"); TermDocs td = ir.termDocs(t); ir.close(); } }