diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
index 23fa932a4c8495da0c3e2d90a371282238f6c6a9..64c86bed66b96695f744c86d8976105bcb162f30 100644
--- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
+++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java
@@ -729,25 +729,28 @@ public class FessEsClient implements Client {
         if (condition.build(searchRequestBuilder)) {
             final FessConfig fessConfig = ComponentUtil.getFessConfig();
 
+            String scrollId = null;
             try {
                 if (logger.isDebugEnabled()) {
                     logger.debug("Query DSL:\n" + searchRequestBuilder.toString());
                 }
                 SearchResponse response = searchRequestBuilder.execute().actionGet(ComponentUtil.getFessConfig().getIndexSearchTimeout());
 
-                String scrollId = response.getScrollId();
+                scrollId = response.getScrollId();
                 while (scrollId != null) {
                     final SearchHits searchHits = response.getHits();
                     final SearchHit[] hits = searchHits.getHits();
                     if (hits.length == 0) {
-                        scrollId = null;
                         break;
                     }
 
                     for (final SearchHit hit : hits) {
                         count++;
                         if (!cursor.apply(creator.build(response, hit))) {
-                            scrollId = null;
+                            if (scrollId != null) {
+                                client.prepareClearScroll().addScrollId(scrollId)
+                                        .execute(ActionListener.wrap(res -> {}, e1 -> logger.warn("Failed to clear scrollId.", e1)));
+                            }
                             break;
                         }
                     }
@@ -758,6 +761,10 @@ public class FessEsClient implements Client {
                     scrollId = response.getScrollId();
                 }
             } catch (final SearchPhaseExecutionException e) {
+                if (scrollId != null) {
+                    client.prepareClearScroll().addScrollId(scrollId)
+                            .execute(ActionListener.wrap(res -> {}, e1 -> logger.warn("Failed to clear scrollId.", e1)));
+                }
                 throw new InvalidQueryException(messages -> messages.addErrorsInvalidQueryParseError(UserMessages.GLOBAL_PROPERTY_KEY),
                         "Invalid query: " + searchRequestBuilder, e);
             }
diff --git a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
index de42b207e44cd4f838d5ac306580bfcc844511c5..6fd8e8bd10a7b90c5005f6c934037c800b9ecd89 100644
--- a/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/config/allcommon/EsAbstractBehavior.java
@@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean;
 import org.dbflute.exception.FetchingOverSafetySizeException;
 import org.dbflute.exception.IllegalBehaviorStateException;
 import org.dbflute.util.DfTypeUtil;
+import org.elasticsearch.action.ActionListener;
 import org.elasticsearch.action.DocWriteResponse.Result;
 import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
 import org.elasticsearch.action.bulk.BulkItemResponse;
@@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             }
 
             if (!handler.apply(searchHits)) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 break;
             }
         }
@@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             count += hits.length;
             final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
             if (bulkResponse.hasFailures()) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
             }
         }
diff --git a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
index 3eb9302eeebe31fb54f6d910b1f83d655e83823c..f63ec1aa1a71fd5f7de62eb43bd5b9494ccbbdcf 100644
--- a/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/log/allcommon/EsAbstractBehavior.java
@@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean;
 import org.dbflute.exception.FetchingOverSafetySizeException;
 import org.dbflute.exception.IllegalBehaviorStateException;
 import org.dbflute.util.DfTypeUtil;
+import org.elasticsearch.action.ActionListener;
 import org.elasticsearch.action.DocWriteResponse.Result;
 import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
 import org.elasticsearch.action.bulk.BulkItemResponse;
@@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             }
 
             if (!handler.apply(searchHits)) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 break;
             }
         }
@@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             count += hits.length;
             final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
             if (bulkResponse.hasFailures()) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
             }
         }
diff --git a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
index ff0667ba0eabd53ebd8d10d75c26dff8a9de772d..3dbf64e139a3d6b59e4aa1d99cb6f1f2230435db 100644
--- a/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
+++ b/src/main/java/org/codelibs/fess/es/user/allcommon/EsAbstractBehavior.java
@@ -41,6 +41,7 @@ import org.dbflute.cbean.result.ListResultBean;
 import org.dbflute.exception.FetchingOverSafetySizeException;
 import org.dbflute.exception.IllegalBehaviorStateException;
 import org.dbflute.util.DfTypeUtil;
+import org.elasticsearch.action.ActionListener;
 import org.elasticsearch.action.DocWriteResponse.Result;
 import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
 import org.elasticsearch.action.bulk.BulkItemResponse;
@@ -247,6 +248,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             }
 
             if (!handler.apply(searchHits)) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 break;
             }
         }
@@ -380,6 +384,9 @@ public abstract class EsAbstractBehavior<ENTITY extends Entity, CB extends Condi
             count += hits.length;
             final BulkResponse bulkResponse = bulkRequest.execute().actionGet(bulkTimeout);
             if (bulkResponse.hasFailures()) {
+                if (response.getScrollId() != null) {
+                    client.prepareClearScroll().addScrollId(response.getScrollId()).execute(ActionListener.wrap(() -> {}));
+                }
                 throw new IllegalBehaviorStateException(bulkResponse.buildFailureMessage());
             }
         }