From 4ea814bf6f81dd5f02c741008f50cc788a07250b Mon Sep 17 00:00:00 2001
From: y_fujita <uu055650@CA0057.local>
Date: Tue, 15 Dec 2015 07:56:47 +0900
Subject: [PATCH] fix oom at suggest job

---
 pom.xml                                       |  2 +-
 .../codelibs/fess/exec/SuggestCreator.java    |  6 +++++
 .../codelibs/fess/helper/SuggestHelper.java   | 22 +++++++++----------
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7f34468e3..3b74ff491 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@
 		<crawler.version>1.0.0</crawler.version>
 
 		<!-- Suggest -->
-		<suggest.version>2.0.1-SNAPSHOT</suggest.version>
+		<suggest.version>2.1.0-SNAPSHOT</suggest.version>
 
 		<!-- Elasticsearch -->
 		<elasticsearch.version>2.1.0</elasticsearch.version>
diff --git a/src/main/java/org/codelibs/fess/exec/SuggestCreator.java b/src/main/java/org/codelibs/fess/exec/SuggestCreator.java
index a33e968de..406ab98e4 100644
--- a/src/main/java/org/codelibs/fess/exec/SuggestCreator.java
+++ b/src/main/java/org/codelibs/fess/exec/SuggestCreator.java
@@ -118,6 +118,12 @@ public class SuggestCreator implements Serializable {
     }
 
     private int create() {
+        final DynamicProperties crawlerProperties = ComponentUtil.getCrawlerProperties();
+        if(!Constants.TRUE.equals(crawlerProperties.getProperty(Constants.SUGGEST_DOCUMENTS_PROPERTY, Constants.TRUE))) {
+            logger.info("Skip create suggest document.");
+            return 0;
+        }
+
         logger.info("Start create suggest document.");
 
         final AtomicInteger result = new AtomicInteger(1);
diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
index c9a44f2be..8236ff4ad 100644
--- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
@@ -39,7 +39,6 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.suggest.Suggester;
 import org.codelibs.fess.suggest.constants.FieldNames;
 import org.codelibs.fess.suggest.entity.SuggestItem;
-import org.codelibs.fess.suggest.index.contents.document.DocumentReader;
 import org.codelibs.fess.suggest.index.contents.document.ESSourceReader;
 import org.codelibs.fess.suggest.settings.SuggestSettings;
 import org.codelibs.fess.suggest.util.SuggestUtil;
@@ -69,6 +68,10 @@ public class SuggestHelper {
 
     public String[] contentsIndexFieldNames = { "content", "title" };
 
+    public long updateRequestIntervalMills = 1;
+
+    public int sourceReaderScrollSize = 1;
+
     private static final String TEXT_SEP = " ";
 
     protected Suggester suggester;
@@ -138,17 +141,14 @@ public class SuggestHelper {
         }
 
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        final DocumentReader reader =
+        final ESSourceReader reader =
                 new ESSourceReader(fessEsClient, suggester.settings(), fessConfig.getIndexDocumentIndex(),
                         fessConfig.getIndexDocumentType());
-
-        suggester.indexer().indexFromDocument(reader, 2, 100).then(response -> {
+        reader.setScrollSize(sourceReaderScrollSize);
+        suggester.indexer().indexFromDocument(reader, 2, updateRequestIntervalMills).then(response -> {
             suggester.refresh();
-
-            //TODO delete old doc
-
-                success.accept(true);
-            }).error(t -> error.accept(t));
+            success.accept(true);
+        }).error(t -> error.accept(t));
     }
 
     public void purgeDocumentSuggest(final LocalDateTime time) {
@@ -214,11 +214,11 @@ public class SuggestHelper {
 
     public void addElevateWord(final String word, final String reading, final String[] tags, final String roles, final float boost,
             final boolean commit) {
-        final List<String> labelList = new ArrayList<String>();
+        final List<String> labelList = new ArrayList<>();
         for (final String label : tags) {
             labelList.add(label);
         }
-        final List<String> roleList = new ArrayList<String>();
+        final List<String> roleList = new ArrayList<>();
         if (StringUtil.isNotBlank(roles)) {
             final String[] array = roles.trim().split(",");
             for (final String role : array) {
-- 
GitLab