gpt4 book ai didi

java - Lucene 6.0.0 从索引中删除文档

转载 作者:行者123 更新时间:2023-12-01 09:50:07 24 4
gpt4 key购买 nike

我正在尝试从我创建的 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 进行搜索,以检查删除文件是否有任何延迟,但我能够在已删除的文件中进行搜索。当我尝试使用查询删除文档时,整个索引都会被删除(即使在附加模式下),并且我确信索引中每个文档的文件名都不同。我是 Lucene 的新手,如果有人能帮助我那就太好了:)

最佳答案

使用经过分析的查询进行删除时应小心。请记住,deleteDocuments 将在运行查询时删除所有 个搜索结果,无论分数如何,而不仅仅是最佳或第一个结果。

假设您正在尝试删除路径“/rootdirectory/testfile.txt”处的文件

分析后的查询将如下所示:filename:rootdirectory filename:testfile.txt

因此,如果您的所有文档文件名都位于“根目录”中的某个位置,那么是的,它们都会被删除。

关于java - Lucene 6.0.0 从索引中删除文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com