当前位置: 首页 > 知识库问答 >
问题:

Lucene 6.0.0从索引中删除文档

公孙智
2023-03-14
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);
        }
   }

共有1个答案

郦昆
2023-03-14

您应该小心使用分析过的查询进行删除。请记住,deletedocuments将在运行查询时删除所有搜索结果,而不是只删除最佳或第一个结果。

假设您试图删除路径为“/rootdirectory/testfile.txt”的文件

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

 类似资料:
  • 问题内容: 我知道可以通过deleteByQuery从某种类型删除所有文档。 例: 但是我没有术语,只是想删除该类型的所有文档,无论使用什么术语。什么是实现这一目标的最佳实践?空项不起作用。 链接到deleteByQuery 问题答案: 我相信,如果您将通过查询进行的删除与匹配相结合,则它应该做您想要的所有事情(例如,使用示例): 或者您可以删除类型:

  • 问题内容: 我有一个包含多个重复条目的索引。它们具有不同的ID,但其他字段具有相同的内容。 例如: 删除重复项后: 有没有一种方法可以删除所有重复项并仅保留一个不同的条目,而无需手动比较所有条目? 问题答案: 我使用rails,如有必要,我将使用命令导入内容,该命令将删除并重新索引该索引和类型的所有内容……但是不确定您在哪个环境中运行ES。我只能看到的问题是数据源是否您正在从中导入(即数据库)的记

  • 如何从索引中删除Elasticsearch中的所有文档,而不删除索引本身? 回答 sql中是否有截断表之类的选项。我知道我可以循环所有id并删除它们中的每一个,但例如通配符可能有一些神奇的选项。

  • 命令用于删除指定的索引。 如果索引创建时未指定索引名称,则索引名称为。 语法 或者 - 删除索引的规则 如果索引不存在,它将返回错误,除非您使用,否则不返回任何操作。 在创建索引期间,您必须使用索引名称指定名称,否则将当前键空间中的索引删除。 示例: 下面举个例子来演示如何删除某列上的索引。 在这里,我们将创建的索引放在表“”中的“”列中。键空间的名称是“”。 如下语句 - 从“”列中删除索引。

  • curl-xdelete“http://localhost:9200/index-consumo_react_mysql/_doc/_query”-d'{“query”:{“match_all”:{}}}‘ 错误: {“错误”:“不支持Content-Type header[application/x-www-form-urlencoded]”,“status”:406}

  • 问题内容: 我的许多日志都以logstash-Year- Week格式编制索引。那就是如果我想删除超过几周的索引,如何在elasticsearch中实现。有没有简单,无缝的方法可以做到这一点? 问题答案: 策展人将是这里的理想之选。您可以在这里找到链接-https: //github.com/elastic/curator 如下所示的命令应该可以正常工作- 您可以将其保留在CRON中,以偶尔删除索