commit infix suggester after building and in commit handler
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene5376@1578014 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lucene/server/src/java/org/apache/lucene/server/IndexState.java b/lucene/server/src/java/org/apache/lucene/server/IndexState.java
index 25d73f9..7b7a200 100644
--- a/lucene/server/src/java/org/apache/lucene/server/IndexState.java
+++ b/lucene/server/src/java/org/apache/lucene/server/IndexState.java
@@ -83,6 +83,7 @@
import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.suggest.Lookup;
+import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
import org.apache.lucene.server.handlers.BuildSuggestHandler;
import org.apache.lucene.server.handlers.LiveSettingsHandler;
import org.apache.lucene.server.handlers.RegisterFieldHandler;
@@ -909,6 +910,12 @@
initSaveLoadState();
}
+ for(Lookup suggester : suggesters.values()) {
+ if (suggester instanceof AnalyzingInfixSuggester) {
+ ((AnalyzingInfixSuggester) suggester).commit();
+ }
+ }
+
JSONObject saveState = new JSONObject();
saveState.put("state", getSaveState());
saveLoadState.save(saveState);
diff --git a/lucene/server/src/java/org/apache/lucene/server/handlers/BuildSuggestHandler.java b/lucene/server/src/java/org/apache/lucene/server/handlers/BuildSuggestHandler.java
index 437f9b7..896ca08 100644
--- a/lucene/server/src/java/org/apache/lucene/server/handlers/BuildSuggestHandler.java
+++ b/lucene/server/src/java/org/apache/lucene/server/handlers/BuildSuggestHandler.java
@@ -177,6 +177,12 @@
private Lookup getSuggester(IndexState state, String suggestName, Request r) throws IOException {
Request.PolyResult pr = r.getPoly("class");
+
+ Lookup oldSuggester = state.suggesters.get(suggestName);
+ if (oldSuggester != null && oldSuggester instanceof Closeable) {
+ ((Closeable) oldSuggester).close();
+ state.suggesters.remove(suggestName);
+ }
String impl = pr.name;
@@ -501,6 +507,9 @@
if (suggester instanceof AnalyzingSuggester) {
ret.put("sizeInBytes", ((AnalyzingSuggester) suggester).sizeInBytes());
}
+ if (suggester instanceof AnalyzingInfixSuggester) {
+ ((AnalyzingInfixSuggester) suggester).commit();
+ }
ret.put("count", suggester.getCount());
return ret.toString();
diff --git a/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java b/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java
index a088849..9a24f00 100644
--- a/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java
+++ b/lucene/server/src/test/org/apache/lucene/server/TestSuggest.java
@@ -294,4 +294,6 @@
send("startIndex");
}
}
+
+ // nocommit test full build over an already built suggester
}
diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
index c14c6e4..b7dd67b 100644
--- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
+++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
@@ -272,7 +272,6 @@
writer = new IndexWriter(dir,
getIndexWriterConfig(matchVersion, getGramAnalyzer(), sorter, IndexWriterConfig.OpenMode.CREATE));
writer.addIndexes(new IndexReader[] {r});
- writer.commit();
r.close();
//System.out.println("sort time: " + ((System.nanoTime()-t1)/1000000) + " msec");
@@ -316,6 +315,9 @@
* you must call {@link #refresh} in the end in order to
* see the suggestions in {@link #lookup} */
public void add(BytesRef text, long weight, BytesRef payload) throws IOException {
+ if (searcherMgr == null) {
+ throw new IllegalStateException("suggester was not built");
+ }
String textString = text.utf8ToString();
Document doc = new Document();
FieldType ft = getTextFieldType();
@@ -338,6 +340,9 @@
* new suggestions, you must call {@link #refresh} in the
* end in order to see the suggestions in {@link #lookup} */
public void update(BytesRef text, long weight, BytesRef payload) throws IOException {
+ if (searcherMgr == null) {
+ throw new IllegalStateException("suggester was not built");
+ }
String textString = text.utf8ToString();
Document doc = new Document();
FieldType ft = getTextFieldType();
@@ -356,9 +361,20 @@
* up" many additions/updates, and then call refresh
* once in the end. */
public void refresh() throws IOException {
+ if (searcherMgr == null) {
+ throw new IllegalStateException("suggester was not built");
+ }
searcherMgr.maybeRefreshBlocking();
}
+ /** Commits changes to the underlying index. */
+ public void commit() throws IOException {
+ if (searcherMgr == null) {
+ throw new IllegalStateException("suggester was not built");
+ }
+ writer.commit();
+ }
+
private void initSorter() {
sorter = new Sorter() {