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() {