如何使用Term或QueryParser从Lucene索引中删除文档

ade*_*ngh 3 lucene indexing

我正在尝试从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)

fem*_*gon 9

我假设您使用的是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)