【发布时间】:2016-06-06 06:25:59
【问题描述】:
我正在尝试从我创建的 Lucene 索引中删除一个文档。我的删除代码看起来像这样:
public void delete(String fname, String index_path)
{
try {
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser(LuceneConstants.FILE_NAME, analyzer);
Directory indexDirectory = FSDirectory.open(Paths.get(index_path));
IndexWriterConfig iwg = new IndexWriterConfig(analyzer);
iwg.setMaxBufferedDeleteTerms(1);
iwg.setOpenMode(IndexWriterConfig.OpenMode.APPEND);
IndexWriter writer = new IndexWriter(indexDirectory,iwg);
writer.deleteDocuments(new Term(LuceneConstants.FILE_NAME,fname));
writer.forceMergeDeletes();
writer.commit();
writer.flush();
System.out.println(writer.hasDeletions());
writer.close();
System.out.println("Deleted File :"+fname);
} catch (IOException ex) {
Logger.getLogger(IndexHandler.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
Logger.getLogger(IndexHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
我尝试在有和没有forceMergeDeletes 的情况下执行上述代码,并且都将hasDeletions 显示为false。我的代码有问题吗?
我还尝试在新程序中打开 IndexReader 进行搜索以检查删除文件是否有任何延迟,但我能够在已删除的文件中进行搜索。当我尝试使用查询删除文档时,整个索引都会被删除(即使在 APPEND 模式下),我确信索引中每个文档的文件名都不同。如果有人可以帮助我,我是 Lucene 的新手,那就太好了:)
【问题讨论】: