我正在尝试从Lucene Index中删除文档.我想只从lucene索引中删除指定的文件.
我的以下程序正在删除可以使用关键字分析器搜索的索引,但只能使用StandardAnalyzer搜索我所需的文件名.那么在我的术语中设置标准分析器的任何方式,或者代替术语,我如何使用QueryParser从lucene索引中删除文档.
try{
File INDEX_DIR= new File("D:\\merge lucene\\abc\\");
Directory directory = FSDirectory.open(INDEX_DIR);
IndexReader indexReader = IndexReader.open(directory,false);
Term term= new Term("path","fileindex23005.htm");
int l= indexReader.deleteDocuments(term);
indexReader.close();
System.out.println("documents deleted");
}
catch(Exception x){x.printStackTrace();}
Run Code Online (Sandbox Code Playgroud)
我假设您使用的是Lucene 3.6或之前,否则IndexReader.deleteDocuments不再存在.但是,无论如何,您应该使用IndexWriter.
如果您只能使用查询解析器找到该文档,那么只需运行一个普通查询,然后遍历返回的文档,并通过docnum删除它们,方法如下:
Query query = queryParser.parse("My Query!");
ScoreDoc[] docs = searcher.search(query, 100).scoreDocs;
For (ScoreDoc doc : docs) {
indexReader.deleteDocument(doc.doc);
}
Run Code Online (Sandbox Code Playgroud)
或者更好(更简单,使用非解散,不推荐的功能),只需使用IndexWriter,并直接传递查询:
Query query = queryParser.parse("My Query!");
writer.deleteDocuments(query);
Run Code Online (Sandbox Code Playgroud)