Lucene索引在应用程序重启时被删除

时间:2016-02-21 12:40:32

标签: java tomcat indexing lucene

我陷入了困境。事情是当tomcat重新启动时,我的所有索引都被删除了(注意我已经明确地注释掉了之前提到的代码)。因此,当我启动应用程序并进入搜索页面时,之前重启的索引保持不变。但是一旦我点击搜索,我就会得到java.io.FileNotFoundException: no segments* file found in org.apache.lucene.store.FSDirectory@/home/<path>: files:并且索引文件夹位置中的所有索引都会被自动删除。我确保没有其他应用程序在不同的jvm上下文中运行,并且没有初始化其他索引编写器实例。所以我观察到的是,只要indexreader初始化,它就会删除所有以前的索引并抛出前面提到的异常。

发布上述异常,如果我将新文档添加到索引并搜索它,它可以正常工作但我丢失了所有以前索引的数据,这迫使我重新运行完整的重新索引并避免重新启动应用程序(因为每当我重启它,有人点击搜索以前的索引被删除)

public static IndexWriter getIndexWriter() throws Exception{
        IndexWriterConfig idc = new IndexWriterConfig(Version.LATEST, TpCustomAnalyzer.getAnalyzer()).setOpenMode(OpenMode.CREATE_OR_APPEND);
        idc.setRAMBufferSizeMB(1024);
        String repositoryPath = RepositoryConstants.DEFAULT_REPOSITORY_PATH;
        try {
            return new IndexWriter(FSDirectory.open(new File(repositoryPath),new NativeFSLockFactory(new File(repositoryPath))),idc);
        } catch (IOException e) {
            throw e;
        }
    }

protected IndexSearcher getIndexSearcher() {
        try {
            if(searcher == null){
                IndexReader idxReader = DirectoryReader.open(FSDirectory.open(new File(repositoryPath)));
                searcher = new IndexSearcher(idxReader);
            }
        } catch (Exception e) {
            TPLogger.getLogger().error("Unable to open index searcher", e);
        }
        return searcher;
    }

我的班级做索引。

/**
 * @author 
 * 
 */
public class TPIndexerJob implements Runnable {

    public void run() {
        TPLogger.getLogger().debug("===== Started new Indexer Job ===============");
        TPIndexEvent indexEvent = null;
        try {
            IndexWriter idxWriter = ParserUtils.getIndexWriter();
            while ((indexEvent = TPIndexEventQueue.getNext()) != null) {
                TPLogger.getLogger().debug("Processing Event ====> " + indexEvent);
                IndexManager.processIndexEvent(indexEvent,idxWriter);
                TPIndexEventQueue.removeFirst();
                // Thread.sleep(1000);
            }
            idxWriter.commit();
            idxWriter.close();
        } catch (Exception e) {
            TPLogger.getLogger().error("Error running indexer job",e);
        }finally{

        }
        TPLogger.getLogger().debug("===== End Indexer Job ===============");
    }

}

我按ctrl + c关闭tomcat是因为突然结束索引以某种方式被破坏了?

关闭tomcat后我的索引结构由以下文件组成:

enter image description here

0 个答案:

没有答案