diff --git a/docs-core/pom.xml b/docs-core/pom.xml
index 9e12d3fb..ed0673dc 100644
--- a/docs-core/pom.xml
+++ b/docs-core/pom.xml
@@ -93,6 +93,12 @@
lucene-queryparser
+
+
+ org.apache.lucene
+ lucene-backward-codecs
+
+
org.imgscalr
imgscalr-lib
diff --git a/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java b/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java
index 535fc26e..7f7fbeed 100644
--- a/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java
+++ b/docs-core/src/main/java/com/sismics/docs/core/service/IndexingService.java
@@ -9,9 +9,9 @@ import org.apache.lucene.index.CheckIndex.Status;
import org.apache.lucene.index.CheckIndex.Status.SegmentInfoStatus;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.NoLockFactory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.store.SimpleFSDirectory;
-import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.lucene.util.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,29 +63,35 @@ public class IndexingService extends AbstractScheduledService {
Path luceneDirectory = DirectoryUtil.getLuceneDirectory();
log.info("Using file Lucene storage: {}", luceneDirectory);
try {
- directory = new SimpleFSDirectory(luceneDirectory, new SingleInstanceLockFactory());
+ directory = new SimpleFSDirectory(luceneDirectory, NoLockFactory.INSTANCE);
} catch (IOException e) {
log.error("Error initializing Lucene index", e);
}
}
// Check index version and rebuild it if necessary
- log.info("Checking index health and version");
- try (CheckIndex checkIndex = new CheckIndex(directory)) {
- Status status = checkIndex.checkIndex();
- if (status.clean) {
- for (SegmentInfoStatus segmentInfo : status.segmentInfos) {
- if (!segmentInfo.version.onOrAfter(Version.LATEST)) {
+ try {
+ if (DirectoryReader.indexExists(directory)) {
+ log.info("Checking index health and version");
+ try (CheckIndex checkIndex = new CheckIndex(directory)) {
+ Status status = checkIndex.checkIndex();
+ if (status.clean) {
+ for (SegmentInfoStatus segmentInfo : status.segmentInfos) {
+ if (!segmentInfo.version.onOrAfter(Version.LATEST)) {
+ log.info("Index is old (" + segmentInfo.version + "), rebuilding");
+ RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent();
+ AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent);
+ break;
+ }
+ }
+ } else {
+ log.info("Index is dirty, rebuilding");
RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent();
AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent);
- break;
}
}
- } else {
- RebuildIndexAsyncEvent rebuildIndexAsyncEvent = new RebuildIndexAsyncEvent();
- AppContext.getInstance().getAsyncEventBus().post(rebuildIndexAsyncEvent);
}
- } catch (IOException e) {
+ } catch (Exception e) {
log.error("Error checking index", e);
}
}
diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java
index 9fcb977f..2754c533 100644
--- a/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java
+++ b/docs-core/src/main/java/com/sismics/docs/core/util/LuceneUtil.java
@@ -33,6 +33,9 @@ public class LuceneUtil {
// Standard analyzer
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
+ // Automatically commit when closing this writer
+ config.setCommitOnClose(true);
+
// Merge sequentially, because Lucene writing is already done asynchronously
config.setMergeScheduler(new SerialMergeScheduler());
@@ -59,7 +62,7 @@ public class LuceneUtil {
try {
indexWriter.close();
} catch (IOException e) {
- log.error("Cannot close IndexWriter", e);
+ log.error("Cannot commit and close IndexWriter", e);
}
}
diff --git a/docs-parent/pom.xml b/docs-parent/pom.xml
index 54ee0aa2..c90ce97c 100644
--- a/docs-parent/pom.xml
+++ b/docs-parent/pom.xml
@@ -339,6 +339,12 @@
${org.apache.lucene.version}
+
+ org.apache.lucene
+ lucene-backward-codecs
+ ${org.apache.lucene.version}
+
+
org.imgscalr
imgscalr-lib