使用Apache Lucene删除磁盘中的所有索引数据/文件?

Ami*_*oda 7 java lucene search-engine flush

我怎样才能刷新/删除/删除所有索引文件/中使用Apache Lucene.This磁盘数据是到目前为止我的代码和我仍然无法删除索引files.Please帮我...

测试:

public class Test {
    private static final String INDEX_DIR = "/home/amila/Lucene/REST/indexing"; 
    public static void main(String[] args) {

         try {
            ContentIndexer contentIndexer = new ContentIndexer(INDEX_DIR);
            contentIndexer.flushDisk();
            System.out.println("Flushed");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ContentIndexer:

public class ContentIndexer {
    private IndexWriter writer;

    public ContentIndexer(String indexDir) throws IOException {

        // create the index
        if (writer == null) {
            writer = new IndexWriter(FSDirectory.open(new File(indexDir)),
                    new IndexWriterConfig(Version.LUCENE_36,
                            new StandardAnalyzer(Version.LUCENE_36)));
        }
    }

    public void flushDisk() {
        try {
            writer.deleteAll();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 更新的答案

public class Test {
    private static final String INDEX_DIR = "/home/amila/Lucene/REST/indexing";

    public static void main(String[] args) {

        try {
            IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_36,
                    new StandardAnalyzer(Version.LUCENE_36));
            conf.setOpenMode(OpenMode.CREATE);
            Directory directory = FSDirectory.open(new File(INDEX_DIR));

            IndexWriter indexWriter  = new IndexWriter(directory, conf);
            indexWriter.deleteAll();
            indexWriter.commit();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

min*_*das 7

最简单的方法是IndexWriter使用CREATE 模式(通过indexWriterConfig.setOpenMode(...))打开。这将删除给定目录中的所有现有索引文件。

对于旧版本的IndexWriter构造函数也有一个特殊的boolean create标志来做同样的事情。


Tal*_*sar 6

您可以使用两个选项:

  1. 您可以调用writer的delete all方法

    indexWriter.DeleteAll();

  2. 您可以将create标志设置为true来创建一个新的indexWriter(open mode = created)

    新的IndexWriter(_luceneDirectory,_analyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);