3. 使用场合:多个搜索引擎查询的数据结果的合并信息操作:添加索引:删除索引 恢复索引
备注:使用IndexReader对象删除文件对象时,它的并非实质上删除,仅仅时设置一个删除的标识,直到IndexReader调用close方法之后才真正删除它们。删除可以根据特定项和索引删除,在删除之后最好使用IndexWriter其进行优化设置.(注意Luence中并没有专门update的方法设置修改索引必须先删除后添加新的索引的方式开发)
/**
* 删除索引对象
* @throws IOException
*/
public void deleteIndex(Directory dir)throws IOException
{
//打开文件的删除使用IndexReader类
IndexReader reader=IndexReader.open(dir);
//reader.maxDoc() 下一个Document对象的编号为2
//reader.numDocs() 索引中有文档数目
System.out.println("before delete max doc="+reader.maxDoc()+" numDocs "+reader.numDocs());
//删除编号为1的文档对象
reader.delete(1);
//reader.isDeleted(1) 检测是否删除
//关闭索引读取对象
reader.close();
//对删除后的信息进行重新编号的文档进行优化
IndexWriter writer=new IndexWriter(dir,new WhitespaceAnalyzer(),false);
//采用优化方案
writer.optimize();
writer.close();
reader=IndexReader.open(dir);
System.out.println("after delete max doc="+reader.maxDoc()+" numDocs "+reader.numDocs());
reader.close();
}
/**
* 修改索引方法
* @throws IOException
*/
public void updateIndex()throws IOException
{
//测试删除前的文档的数量
assertEquals(1, this.getHitCount("city", "Amsterdam"));
IndexReader reader=IndexReader.open(dir);
//删除索引的信息
reader.delete(new Term("city","Amsterdam"));
// 在文档被设置删除标识,但没有执行最后删除之前,恢复被标记为删除的文档。reader.undeleteAll();
reader.close();
//测试删除后文档数量
assertEquals(0, this.getHitCount("city", "Amsterdam"));
IndexWriter writer=new IndexWriter(dir,this.getAnalyzer(), false);
Document doc=new Document();
doc.add(Field.Keyword("id", "1"));
doc.add(Field.UnIndexed("country", "Netherland"));
doc.add(Field.UnStored("contents","Amsterdam has lots of bridges"));
doc.add(Field.Text("city","Haag"));
writer.addDocument(doc);
writer.optimize();
writer.close();
assertEquals(1, this.getHitCount("city", "Haag"));
}
/**
* 字词分析器的
*/
public Analyzer getAnalyzer()
{
return new WhitespaceAnalyzer();
}