docs/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java

86 lines
2.4 KiB
Java
Raw Normal View History

2013-07-27 18:33:20 +02:00
package com.sismics.docs.core.util;
2018-03-14 14:53:41 +01:00
import com.sismics.docs.core.model.context.AppContext;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
2013-07-27 18:33:20 +02:00
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.SerialMergeScheduler;
import org.apache.lucene.store.Directory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2018-03-14 14:53:41 +01:00
import java.io.IOException;
2013-07-27 18:33:20 +02:00
/**
* Lucene utils.
*
* @author bgamard
*/
public class LuceneUtil {
/**
* Logger.
*/
private static final Logger log = LoggerFactory.getLogger(LuceneUtil.class);
/**
* Encapsulate a process into a Lucene context.
*
2018-03-14 14:53:41 +01:00
* @param runnable Runnable
2013-07-27 18:33:20 +02:00
*/
public static void handle(LuceneRunnable runnable) {
// Standard analyzer
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
2013-07-27 18:33:20 +02:00
// Automatically commit when closing this writer
config.setCommitOnClose(true);
2013-07-27 18:33:20 +02:00
// Merge sequentially, because Lucene writing is already done asynchronously
config.setMergeScheduler(new SerialMergeScheduler());
// Creating index writer
Directory directory = AppContext.getInstance().getIndexingService().getDirectory();
2013-07-27 18:33:20 +02:00
IndexWriter indexWriter = null;
try {
indexWriter = new IndexWriter(directory, config);
} catch (IOException e) {
log.error("Cannot create IndexWriter", e);
}
try {
runnable.run(indexWriter);
} catch (Exception e) {
log.error("Error in running index writing transaction", e);
try {
2018-03-14 14:53:41 +01:00
if (indexWriter != null) {
indexWriter.rollback();
}
2013-07-27 18:33:20 +02:00
} catch (IOException e1) {
log.error("Cannot rollback index writing transaction", e1);
}
}
try {
2018-03-14 14:53:41 +01:00
if (indexWriter != null) {
indexWriter.close();
}
2013-07-27 18:33:20 +02:00
} catch (IOException e) {
log.error("Cannot commit and close IndexWriter", e);
2013-07-27 18:33:20 +02:00
}
}
/**
* Lucene runnable.
*
* @author bgamard
*/
public interface LuceneRunnable {
/**
* Code to run in a Lucene context.
*
2018-03-14 14:53:41 +01:00
* @param indexWriter Index writer
* @throws Exception e
2013-07-27 18:33:20 +02:00
*/
2018-03-14 14:53:41 +01:00
void run(IndexWriter indexWriter) throws Exception;
2013-07-27 18:33:20 +02:00
}
}