【问题标题】:Lucene 6.0.0 deleting document from indexLucene 6.0.0 从索引中删除文档
【发布时间】: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 的新手,那就太好了:)

【问题讨论】:

    标签: java indexing lucene


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 无论如何我可以使用文件路径进行精确匹配搜索吗?说像 C:/Folder/filename 这样的文件路径。我注意到,使用标准分析器,即使我已经对其进行了索引,我也无法通过文件路径进行搜索。 Folder/filename 工作正常,但是一旦我添加了根目录 C: ,就找不到任何文档。
    • @SH_V95 当然,在不分析的情况下对其进行索引(即作为 StringField)是在非文本字符串上获得精确匹配的典型方法。
    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多