索引的读取工具IndexReader,主要用来对索引进行读取,包括删除等操作,删除操作的时候,如果删除完成,则必须执行close操作,否则将无法进行删除。
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 ReaderTest {
private String INDEX_STORE_PATH = "d:\\indextest";
public void test() throws Exception{
IndexWriter writer = new IndexWriter(INDEX_STORE_PATH, new StandardAnalyzer(), true);
writer.setUseCompoundFile(false);
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Field f1 = new Field("bookname", "平凡的世界", Field.Store.YES, Field.Index.TOKENIZED);
Field f2 = new Field("bookname", "英雄儿女", Field.Store.YES, Field.Index.TOKENIZED);
Field f3 = new Field("bookname", "基督山伯爵", Field.Store.YES, Field.Index.TOKENIZED);
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.close();
// 使用IndexReader读取索引
IndexReader reader = IndexReader.open(INDEX_STORE_PATH);
// 显示索引内所有的Document
System.out.println("索引文档列表:");
for(int i =0;i<reader.numDocs();i++){
System.out.println(reader.document(i));
}
// 输出当前索引的版本信息
System.out.println("版本:" + reader.getVersion());
// 输出当前索引的文档数量
System.out.println("索引内的文档数量:" + reader.numDocs());
// 构造一个词条并在索引中查找
System.out.println();
System.out.println("查找词条'女'");
Term term1 = new Term("bookname", "女");
TermDocs termDocs = reader.termDocs(term1);
while(termDocs.next()){
System.out.println("--------------------");
System.out.println("含所有查找的<" + term1 + ">的Document的编号为" + termDocs.doc());
System.out.println("Term在文档中出现的次数为:" + termDocs.freq());
}
reader.close();
}
public void deleteDoc() throws Exception{
IndexReader reader = IndexReader.open(INDEX_STORE_PATH);
System.out.println(reader.numDocs());
reader.deleteDocument(1);
reader.close();
IndexReader read = IndexReader.open(INDEX_STORE_PATH);
System.out.println(read.numDocs());
// System.out.println(read.document(1));
// System.out.println(read.document(2));
}
public static void main(String[] args) throws Exception {
// new ReaderTest().test();
new ReaderTest().deleteDoc();
}
}